私は、失敗した JUnit テストをすぐに再実行する方法の元の回答者です?
私の理解が正しければ、あなたが抱えている問題は@Before
、 のコードの前に実行されRetryRule
、@After
その後に実行されることが原因です。
したがって、現在の動作は次のようになります。
@Before
@Retry
test code
@Retry
@After
@Before
ただし、ルールとしてandを実装できます-まさにそれを@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
その後、 andは必要ありません@After
。その後、 RuleChainを使用してこれらのルールをチェーンできます。これにより、ルールの実行順序が強制されます。
@Rule public RuleChain chain= RuleChain
.outerRule(new LoggingRule("outer rule")
.around(new LoggingRule("middle rule")
.around(new LoggingRule("inner rule");
したがって、最終的な解決策は次のようになります。
private ExternalResource beforeAfter = ...
private RetryRule retry = ...
@Rule public RuleChain chain = RuleChain
.outerRule(retry)
.around(beforeAfter);
を使用している場合は、との注釈はRuleChain
必要なくなりますが、 では必要になることに注意してください。@Rule
ExternalResource
RetryRule
RuleChain