5

ときどき、例外がスローされたり、プログラムが中断されたり、無限ループなどに巻き込まれたりせずに、プログラムの実行が特定のポイントに到達するかどうかだけをテストする必要がある状況に遭遇します。

私が理解していないのは、そのための単体テストの書き方です。

たとえば、次の「単体テスト」を考えてみましょう -

@Test
public void testProgramExecution()
  {
     Program program = new Program();
     program.executeStep1();
     program.executeStep2();
     program.executeStep3();

     // if execution reaches this point, that means the program ran successfully. 
     // But what is the best practice?
     // If I leave it like this, the test will "pass", 
     // but I am not sure if this is good practice. 
  }

通常、テストの最後に、次のようなステートメントがあります-

assertEquals(expectedString, actualString);

しかし、上記のケースで assertEquals やその他のタイプのテスト ステートメントを作成するにはどうすればよいでしょうか。

4

3 に答える 3

5

あなたのコードは問題ないように見えます。コメントを削除するだけですが、これはそのままにしておきます。

// If execution reaches this point, that means the program ran successfully.

したがって、コードの読者は、アサーションがない理由を理解できます。

テストで呼び出されるすべてのメソッドには何らかの効果が必要であり、「気にしない」と言っても、その効果は正しく発生したと主張する必要があることに注意してください。

チェックする必要がないと主張する場合は、その理由を説明するコメントを追加してください。これにより、読者が「問題ではない」理由を自分で見つけるためにコードを探し回る必要がなくなります。次に例を示します。

// No assertions have been made here because the state is unpredictable.
// Any problems with execution will be detected during integration tests.
于 2012-08-21T16:00:30.693 に答える
2

例外がスローされないという単純な行為がテストに合格したことを意味する場合、アサーションは必要ありません。確かに、これはアクションに目に見える副作用がないことを示唆していますが、これはややまれです. この場合、アサーションよりもコメントの方が役に立ちます。

通常、これは、実際の結果を確認するための他のテスト、無効な入力を証明するいくつかのテスト、およびほぼ有効な入力を証明するいくつかの同様のテストがある場合にのみ発生します。たとえば、入力が範囲内にある必要があることを検証したい場合は[0, 100]、いくつかの中間値、無効な値の -1 と 101、有効な値の 0 と 100 に対して「完全な」テストを行うことができます。それらは有効です。

于 2012-08-21T16:00:27.137 に答える
2

そのような状況では、私は挿入するだけです

assertTrue(true);

関数の最後に...

于 2012-08-21T16:01:01.923 に答える