私は私が正しく理解していればHow to Re-run failed JUnit tests immediately?
のオリジナルの回答は、あなたが持っている問題はRetryRule
にコードの前に実行されている@Before
によるもので、@After
がその後実行されています。
だからあなたの現在の行動のようなものです:
@Before
@Retry
test code
@Retry
@After
しかし、あなたは、原則としてご@Before
と@After
を実装することができます - まさにそのルールExternalResourceがあります。あなたは、原則として@Before
と@After
を実装します:
@Rule public ExternalResource beforeAfter = new ExternalResource() {
public void before() {
// code that was in @Before
}
public void after() {
// code that was in @After
}
}
次にあなたが@Before
と@After
を必要としません。これらのルールは、RuleChainを使用してチェーンすることができます。これはあなたのルールに実行順序を強制的に:
@Rule public RuleChain chain= RuleChain
.outerRule(new LoggingRule("outer rule")
.around(new LoggingRule("middle rule")
.around(new LoggingRule("inner rule");
ので、あなたの最終的な解決策のようなものもないだろう:あなたはRuleChain
を使用している場合、あなたはもはや上@Rule
注釈が必要であることを
private ExternalResource beforeAfter = ...
private RetryRule retry = ...
@Rule public RuleChain chain = RuleChain
.outerRule(retry)
.around(beforeAfter);
注意ExternalResource
とRetryRule
ですが、RuleChain
で行っています。
これは初めてテストに失敗しただけではなく、テストを2回実行することはありませんか? –
@ JohnB - 書かれているとおり、はい。しかし、彼のテストは本質的に一時的な接続性の問題のために失敗したように見えるので、これはOPの利点です。 – Brian
しかし、最初に通過して2回目に失敗した場合、失敗を報告し、失敗を2倍にする可能性があります。 –