Lor*_*orm 8 java testing junit
我正在努力改进现有的自动化Selenium测试系统.我的目标是重复因连接问题而失败的测试.我发现并试图遵循这个线程如何立即重新运行失败的JUnit测试?这表明它非常有用.
在我的情况下,套件由类组成,所以我试图用@ClassRule替换@Rule,以便重复每次尝试@Before和@After部分.对不起我很抱歉,但我应该把这个规则放在哪里?在我的套件课程中?或者在代表测试的类中?
如果我理解正确的话,你所遇到的问题是由于在对@Before的代码之前被执行RetryRule,并且@After存在之后执行。
所以你目前的行为是这样的:
@Before
@Retry
test code
@Retry
@After
Run Code Online (Sandbox Code Playgroud)
但是您可以实施您的@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
}
}
Run Code Online (Sandbox Code Playgroud)
那么你不需要@Beforeand @After。然后,您可以使用RuleChain链接这些规则。这会强制执行您的规则的顺序:
@Rule public RuleChain chain= RuleChain
.outerRule(new LoggingRule("outer rule")
.around(new LoggingRule("middle rule")
.around(new LoggingRule("inner rule");
Run Code Online (Sandbox Code Playgroud)
所以你的最终解决方案是这样的:
private ExternalResource beforeAfter = ...
private RetryRule retry = ...
@Rule public RuleChain chain = RuleChain
.outerRule(retry)
.around(beforeAfter);
Run Code Online (Sandbox Code Playgroud)
请注意,如果您使用的是RuleChain,则不再需要and@Rule上的注释,但需要在.ExternalResourceRetryRuleRuleChain
您可以使用或属性来修饰测试名称本身:@After@Afterclass
@After
@Test
@Category(SmokeTests.class)
public void testProductPageOnly() throws TimeoutException {
//Some tests here.
}
@Afterclass
public static void SomeTest {
//Some test here.
}
Run Code Online (Sandbox Code Playgroud)
需要注意的事情,@Afterclass总会跑;即使您使用的@Beforeclass是引发异常的 a。
| 归档时间: |
|
| 查看次数: |
3311 次 |
| 最近记录: |