22

Cucumber JVM の使用時に正しい例外がスローされることをテストする方法は? JUnit を使用する場合、次のようにします。

@Test(expected = NullPointerException.class)
public void testExceptionThrown(){
    taskCreater.createTask(null);
}

ご覧のとおり、これは非常にエレガントです。しかし、キュウリ JVM を使用する場合、どうすれば同じエレガンスを実現できるでしょうか? 私のテストは今このように見えます:

@Then("the user gets a Null pointer exception$")
public void null_exception_thrown() {
    boolean result = false;
    try {
        taskCreater.createTask(null);
    } catch (NullPointerException e) {
        result = true;
    }
    assertTrue(result);
}

try.. のcatch後にassertTrueon a フラグが続く必要があることに注意してください。

4

7 に答える 7

7

次のように、ExpectedException で junit @Rule アノテーションを使用してみましたか。

@Rule
public ExpectedException expectedEx = ExpectedException.none();

@Then("the user gets a Null pointer exception$")
public void null_exception_thrown() {
    expectedEx.expect(NullPointerException.class);
    //expectedEx.expectMessage("the message");
    taskCreater.createTask(null);
}
于 2013-06-27T00:56:05.187 に答える
5

動作テストは、プロジェクトが仕様に従っているかどうかを検証します。ユーザーがシステムの使用中に NullPointerException を予期しているとは思えません。

私の意見では(私はあなたのプロジェクトに精通していません)、例外は予期しないエラーまたはユーザーのミスに対応するため、単体テスト中にのみチェックする必要があります。

動作テスト中に例外をチェックすることは非常にまれです。テスト中に例外がスローされた場合、テストは失敗するはずです。

例えば:

テスト機能

Given that I have a file "users.txt"
And I try to import users /* If an Exception is thrown here, the test fails */
Then I should see the following users: /* list of users */

私の単体テストでは、次のようになります。

@Test(expected = MyException.class)
public void importUsersShouldThrowMyExceptionWhenTheFileIsNotFound() {
    // mock a call to a file and throw an exception
    Mockito.when(reader.readFile("file.txt").thenThrow(new FileNotFoundException());

    importer.importUsers();
}
于 2013-09-11T20:15:46.707 に答える
3

キュウリを使用したことはありませんが、

    public void null_exception_thrown() {
            try {
                  taskCreater.createTask(null);
                  fail("Null Pointer Expected");
            } catch (NullPointerException e) {

                // Do Nothing
             }
        }

あなたのために働きますか?

于 2013-06-24T09:41:45.443 に答える
1

Cucumber は、低レベルの単体テストよりも高レベルの受け入れテストをテストすることを意図していると思います。その場合 、Cucumber フレームワークの望ましい使用法ではない動作とは対照的に、構造をテストすることになります。

于 2015-11-26T03:38:12.253 に答える