どのように偉大なテストを書く!


インマイprevious post , 私は粋な選別テストについて話し合った.今日、私は偉大なテストを書く方法を教えるつもりです!新しい文章を書くときJUnit テストIは、同じ公式に続きます.これにより、テストを一貫して書くことができます.また、私は速くテストを書くのに役立ちます.私は今日あなたのフォーマットを共有したい!

ファイル
まず最初に、プロジェクトのテストパッケージに新しいテストファイル/クラスを作成し、テストメソッドを作成します.テスト終了Test だから、対応するクラスを見つけるのは簡単です.クラス名SomeService という名前のSomeServiceTest .
次に、私は私のテストに良い名前を与えることを確認します.私は個人的に単語を省略したいtest テストクラスで冗長なので.テストの名前はテストされていることを記述すべきです.簡単に同様のテストを区別することができます.
public SomeServiceTest{
    @Test
    public void sortByPopularVoteDesc() {

    }
    @Test
    public void sortByPopularVoteAsc() {

    }
}

概略
次に、私は私の方法の中にいくつかのボイラープレートを置きました.これは私のすべてのテストに使用するのと同じフォーマットです.私は私のテストを設定し、私は関数を呼び出すと、最終的に、私は主張のいくつかの並べ替えを使用するか、または期待結果を確保するために確認します.
public TestClass{
    @Test
    public void sortByPopularVote() {
      // setup
      // test
      // assert/validate
    }
}
これらのコンポーネントのいくつかを議論しましょう.
  • setup - これはテストするコードを準備する場所です.
  • test - これはテスト中の関数を呼び出す場所です.これは、あなたのテストで複数の関数を呼び出す場合は指摘するのに良いことができます.
  • assert/validate - これはあなたが実際に使用する場所ですassert or validate 関数は、実際の出力が期待するものと一致するようにします.

  • テストのセットアップ
    最後に、私は単に空白を埋めます.私のセットアップが他のすべてのテストに似ているならば、私はこのロジックをAに要約します@Before 関数.この関数は、各テストの前に呼び出されます.あなたがいくつかのテストの間の一般的なセットアップを持っているが、それらのすべてでないならば、それは特定のセットアップ命令をカプセル化するために個人の機能を書くことも一般的な習慣です.どちらのオプションも共通のテストのセットアップを再利用可能になります.あなたのテストを設定するの変更を行う必要がある場合のみ1つの場所でそれを確認する必要があります.これはリファクタがある特定のテストを中断するときに非常に便利です.
    public TestClass{
      private List<SortableObj> expected;
      private final SortableObj first = new SortableObj();
      private final SortableObj second = new SortableObj();
      private final SortableObj third = new SortableObj();
      private final SortableObj fourth = new SortableObj();
    
       @Before
       public void before{
         // some decoration on objects
         // ...
         expected = Arrays.asList(first, second, third, fourth);
       }
    
        @Test
        public void sortByPopularVote() {
          // setup
          List<SortableObj> actual = Arrays.asList(fourth, third, first, second);
          // test
          Collections.sort(actual);
          // assert/validate
          assertThat(actual).isEqualTo(expected);
        }
    }
    

    命名法のテスト
    変数名の使用に注意してくださいexpected and actual . これらは一般的にテストを書くことに関連付けられているキーワードであり、それらをより読みやすくする.あなたが欲しいactual 関数から返されるオブジェクトexpected 値.
  • expected - これは出力がどのように見えるかについての変数の名前です.この例では、リストがある順序になります.
  • actual - これは、テスト中の関数の出力に使用する変数の名前です.これは関数への“実際の”出力です.
  • Nomenclature - The devising or choosing of names for things, especially in a science or other discipline. In the context of software, this deals with the consistent naming of API endpoints, responses, variables, functions, and documentation.



    結論
    この形式を使用すると、効率的な方法でより一貫したテストを記述できます.これにより、より保守性の高いコードを実装できます.この投稿をお楽しみください!私のシリーズをチェックしてくださいJUnit tests !
    あなたは私の最新のソフトウェアコンテンツを最新の状態に保つ場合は私に従ってください!