テストケースのアサートの1つが失敗した場合でも実行を継続する機能を提供するJfuncを使用して既存のフレームワークを構築しました。Jfunc は、junit 3.x フレームワークを使用します。しかし、現在はjunit4に移行しているため、Jfuncを使用できなくなり、junit 4.10 jarに置き換えました。
ここでの問題は、フレームワークで jfunc を広く使用しているためです。junit 4 では、テスト ケースでアサートの 1 つが失敗した場合でも、コードを実行し続けたいと考えています。
誰かがこれについて何か提案/アイデアを持っていますか?私はjunitでテストをよりアトミックにする必要があることを知っています.つまり、テストケースごとに1つのアサートが必要ですが、何らかの理由でフレームワークでそれを行うことはできません.
質問する
38636 次
7 に答える
75
これは、 ErrorCollectorルールを使用して行うことができます。
これを使用するには、まずルールをフィールドとしてテスト クラスに追加します。
public class MyTest {
@Rule
public ErrorCollector collector = new ErrorCollector();
//...tests...
}
次に、アサートを への呼び出しに置き換えますcollector.checkThat(...)
。
例えば
@Test
public void myTest() {
collector.checkThat("a", equalTo("b"));
collector.checkThat(1, equalTo(2));
}
于 2012-04-19T05:12:31.090 に答える
22
ErrorCollectorも使用しますが、assertThatも使用して、trycatchブロックに配置します。
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
@Rule
public ErrorCollector collector = new ErrorCollector();
@Test
public void calculatedValueShouldEqualExpected() {
try {
assertThat(calculatedValue(), is(expected));
} catch (Throwable t) {
collector.addError(t);
// do something
}
}
于 2012-07-12T03:35:02.140 に答える
5
assertjも使用できます-ソフトアサーション
@Test
public void testCollectErrors(){
SoftAssertions softly = new SoftAssertions();
softly.assertThat(true).isFalse();
softly.assertThat(false).isTrue();
// Don't forget to call SoftAssertions global verification !
softly.assertAll();
}
手動で softly.assertAll(); を呼び出さずに使用する他の方法もあります。
于 2016-12-20T13:00:24.763 に答える
3
try/finally ブロックを使用します。これは私の場合に機能しました:
...
try {
assert(...)
} finally {
// code to be executed after assert
}
...
于 2015-08-29T18:37:36.573 に答える
0
Try - キャッチ。「try」でアサーションを使用し、「catch」で考えられるエラーをコレクションに追加します。次に、テストの最後に、tearDown() で例外をスローします。したがって、アサートに失敗/エラーが発生した場合、それがキャッチされ、テストが続行されます。(例のコレクションは静的です。@Test ごとに setUp() で新しいインスタンスを作成することもできます)
public static List<String> errors = new ArrayList<>();
try {
//some assert...
}
catch (AssertionError error) {
errors.add(error.toString());
}
@After
public void tearDown() {
try {
if (!errors.isEmpty()) {
throw new AssertionError(errors);
}
}
finally {
//empty list because it's static, alternatively make instance for each test in setUp()
errors.clear();
}
}
于 2018-11-20T08:46:19.080 に答える