2

最近、Junit @Theory テスト スタイルを試しました。これは、非常に効率的なテスト方法です。ただし、テストが失敗したときにスローされる例外には満足していません。例 :

import static org.junit.Assert.assertEquals;
import org.junit.experimental.theories.DataPoint;
import org.junit.experimental.theories.Theories;
import org.junit.experimental.theories.Theory;
import org.junit.runner.RunWith;


@RunWith(Theories.class)
public class TheoryAndExceptionTest {

    @DataPoint
    public static String yesDataPoint = "yes";

    @Theory
    public void sayNo(final String say) {
        assertEquals("no",say);
    }
}

このテストは説明的な例外をスローすることを期待していますが、代わりに次のようなものを取得します。

org.junit.ComparisonFailure: expected:<'[no]'> but was:<'[yes]'>

...私はこれを取得します:

org.junit.experimental.theories.internal.ParameterizedAssertionError: sayNo(yes) at
....
[23 lines  of useless stack trace cut]
...
Caused by: org.junit.ComparisonFailure: expected:<'[no]'> but was:<'[yes]'>
....

yesDataPoint @DataPoint が失敗を引き起こすことを除いて、 * my *testについて何も言わない最初の 24 行を取り除く方法はありますか? 何が失敗しているのかを知るために必要な情報ですが、同時にどのように失敗するのかを知りたいです。

[編集]

混乱を避けるために、org.fest.assertions の使用法を従来の org.junit.Assert.assertEquals に置き換えました。さらに、Eclipse とも関係ありません。コマンドラインから @Theory を実行して失敗すると、長い (役に立たない/紛らわしい) スタック トレースが得られます。

4

2 に答える 2

0

ComparisonFailureをキャッチしてそのGetMessage()を出力することに問題はありますか?

public void sayNo(final String say) {
    try {
        assertThat(say).isEqualTo("no");
    }catch(ComparisonFailure e) {
        System.out.println(e.getMessage);
    }
}

誤解されていることがありましたらお詫び申し上げます。

編集:ComparisonFailureには、特定のフォーマットを探している場合に呼び出すことができるgetExpected()メソッドとgetActual()メソッドもあります。

于 2012-12-06T20:37:17.530 に答える
0

あなたは非常に奇妙な図書館を持っています。assertThat の構文が変です。私は提案します:

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.experimental.theories.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;

@RunWith(Theories.class)
public class TheoryAndExceptionTest {

    @DataPoint
    public static String yesDataPoint = "yes";

    @Theory
    public void sayNo(final String say) {

        assertThat(say,is("no"));
    }

    @Test
    public void yesNo() {
        assertEquals("must be equal, ", "yes","no");
    }
}

次に、次のようになります。

org.junit.experimental.theories.internal.ParameterizedAssertionError: sayNo(yesDataPoint)
....

Caused by: java.lang.AssertionError: 
Expected: is "no"
     got: "yes"

assertEqual については、あなたが正しいです。理論では役に立たないようです。@Test のみ:

    org.junit.ComparisonFailure: must be equal,  expected:<[yes]> but was:<[no]>

追加:

使用することもできます

assertThat("must be equal, ", say,is("no"));

出力が得られるよりも:

Caused by: java.lang.AssertionError: must be equal, 
Expected: is "no"
     got: "yes"

余分な行をフィルタリングするには、Eclipse の Failure Trace View を使用します。

于 2012-12-06T20:40:59.253 に答える