目次
序文:
美しいテスト コードを書くことはテスターにとって非常に重要です。洗練されたコードはコードの読みやすさと保守性を向上させるだけでなく、コードの理解と再利用を容易にするからです。
ファイル形式
まず、プロジェクトのテストパッケージ配下に新しいテストファイル/テストクラスを作成し、テストメソッドを作成します。テストファイル/テストクラスを記述する際、すべてのテストファイル/テストクラスの末尾がTestで終わるため、テストファイル/テストクラスであることが分かりやすく、後のメンテナンス時に閲覧・編集する際にも便利です。たとえば、SomeService という名前のクラスには、SomeServiceTest という名前の対応するテスト クラスがあります。
(翻訳者のコメント: これは良い習慣であり、プロジェクトのテストのルールとして考慮できます。開発者がプログラムに SomeService クラスを作成した場合、SomeService クラスをテストするとき、ファイル名は SomeServiceTest である必要があり、 class name + Test の形式でテスト クラスに名前を付けます。)
次に、テストに識別しやすく、区別しやすく、聞き心地の良い名前を付けます。個人的には、テストという単語は省略することを好みます。これは、テストはテスト クラス内で実行され、テストを追加し続けるのは少し面倒だからです。名前。テスト名については、各テストをよりよく区別できるように、名前から測定された内容を読み取る必要があります。
public SomeServiceTest{
@Test
public void sortByPopularVoteDesc() {
}
@Test
public void sortByPopularVoteAsc() {
}}
(翻訳者のコメント:テスト名については、わかりやすい名前を付けるとよりサポートされます。名前を参照してください。ただし、テストという単語の省略については、翻訳者は通常は省略できることを理解していますが、必要なシナリオはまだ追加したいと思っています。)
概要
次に、作成者はテスト メソッドにいくつかのテンプレートを作成します。このテンプレートは、すべてのテストを作成するときに使用するテンプレートです。まず、テスト メソッドに事前設定された条件セットアップを設定し、次にメソッドをテストし、最後にアサーション/検証を行って、期待される結果がアサーションと一致していることを確認します。
public TestClass{
@Test
public void sortByPopularVote() {
// setup
// test
// assert/validate }}
上記のコードの一部の内容の意味は次のとおりです。
-
setup: テスト プレハブが書き込まれる場所。
-
test: メソッドをテストする場所。
-
アサート/検証: ここにアサーションを記述します。
(翻訳者のコメント: ここでの著者の文章はあまり完全ではありません。準備条件はありますが、破棄条件はありません。自動テストの非常に重要なステップがデータの復元であることは誰もが知っています。テスト後にデータが復元されないと、 1 回の実行に影響します。したがって、上記の 3 つのプロセスの後に、破棄条件の破棄が必要になります (破棄は必須ではないかもしれません。したがって、セットアップ、テスト、アサート/検証、破棄の合計 4 つのステップがあるはずです)。
(翻訳者のコメント: 上記の範囲は少し狭いです。テスト クラスでこのような設定が必要なだけでなく、テスト クラス レベルでのセットアップ、テスト、アサート/検証、ティアダウンの 4 つのステップも必要です。ファイルレベル。)
プレハブ条件
最後に、空白を埋めるだけで済みました。前提条件が他のすべてのテストの前提条件と類似している場合は、このロジックを @Before 関数に抽象化します。この関数は各テストの前に実行されます。すべてのテストではなく、複数のテストで事前に作成された条件を設定する必要がある場合は、それをプライベート関数として設定してカプセル化します。一般的なテストの場合、これら 2 つの方法を使用して事前に作成された条件を設定すると、コードの再利用性が向上します。テストのプレハブ条件を変更する必要がある場合、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);
}}
テスト名
「期待される」と「実際」という用語は、期待される結果と実際の結果に名前を付けるときに役立ちます。これら 2 つのキーワードを使用してアサーションを書くと、非常に読みやすくなります。actual は実際の結果、expected は期待される結果です。これら 2 つの結果を比較に使用します。
-
Expected : これは期待される結果、つまり期待される結果です。期待される結果が複数ある場合があります。記述するときは特定の順序に従ってください。
-
actual : テスト実行後の実際の出力結果。ネーミングとは、特に科学やその他の分野において、物事の名前を指定または選択することです。ソフトウェアの開発とテストでは、API、応答結果、変数、関数、ドキュメント名が関係します。
結論は
この形式のテンプレートをテストに使用すると、テストの効率が向上し、コードの保守が容易になります。
ここに来た者として、皆さんが寄り道をしないように願っていますが、ここでは、自動テストを進める上で必要なことをいくつか共有し、皆さんのお役に立てれば幸いです。(WEB 自動テスト、アプリ自動テスト、インターフェイス自動テスト、継続的インテグレーション、自動テスト開発、大規模な工場面接の質問、履歴書のテンプレートなど)、より良い進歩をもたらすことができると信じています。