コード嗅覚91 -テストなしで断言する


私たちはXUnitの大ファンです.しかし、我々はプログラマにあまり関心がありません.

TL;DR: Use asserts with declarative descriptions.



問題
  • 読みやすさ
  • ハードデバッグ
  • 時間廃棄物

  • 解決策
  • 良い記述的な主張をする
  • 問題解決のための共有ガイド

  • サンプルコード

    間違い
    <?
    
    public function testNoNewStarsAppeared(): void
      {
         $expectedStars = $this->historicStarsOnFrame();
         $observedStars = $this->starsFromObservation();
         //These sentences get a very large collection
    
         $this->assertEquals($expectedStars, $observedStars);
         //If something fails we will have a very hard debugging time
        }
    


    <?
    
    public function testNoNewStarsAppeared(): void
      {
         $expectedStars = $this->historicStarsOnFrame();
         $observedStars = $this->starsFromObservation();
         //These sentences get a very large collection
    
         $newStars = array_diff($expectedStars, $observedStars);
    
         $this->assertEquals($expectedStars, $observedStars ,
             'There are new stars ' . print_r($newStars,true));
         //Now we can see EXACTLY why the assertion failed with a clear and
         //Declarative Message 
        }
    

    検出
    assertとassertdescriptionは異なった機能であるので、我々は後者を支持するために我々の方針を調節することができます.

    タグ
  • テスト臭気

  • 結論
    あなたの主張の読者に敬意を表しなさい.
    それは、あなた自身さえかもしれません!

    詳しい情報
  • XUnit: Assert Description Deprecation

  • クレジット
    写真でStartaê Team on Unsplash

    Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.


    ジョン・ウッズ


    この記事はCodesmellシリーズの一部です.