【发布时间】:2012-08-22 18:11:32
【问题描述】:
我有一个测试套件,我在@After 中注销系统并在@AfterClass 中关闭浏览器。我正在尝试使用 @Rule 为每种测试方法使用 Selenium 拍摄失败的测试屏幕截图。我手动检查了@Rule 只在每个@Before 之前运行,但我想在@Test 之后和@After 之前设置它。我找不到简单的解决方案。任何帮助将不胜感激。
public class MorgatgeCalculatorTest {
@Before
public void before(){
System.out.println("I am before");
}
@BeforeClass
public static void beforeclass(){
System.out.println("I am beforeclass");
}
@Test
public void test(){
System.out.println("I am Test");
}
@Test
public void test2(){
System.out.println("I am Test2");
}
@After
public void after(){
System.out.println("I am after");
}
@AfterClass
public static void afterclass(){
System.out.println("I am afterclass");
}
@Rule
ExpensiveExternalResource ExpensiveExternalResource = new ExpensiveExternalResource();
static class ExpensiveExternalResource implements MethodRule {
public ExpensiveExternalResource(){
System.out.println("I am rule");
}
@Override
public Statement apply(Statement arg0, FrameworkMethod arg1, Object arg2) {
// TODO Auto-generated method stub
return null;
}
}
我得到的输出是
I am beforeclass
I am rule
I am before
I am Test
I am after
I am rule
I am before
I am Test2
I am after
I am afterclass
【问题讨论】:
-
我提到我只想在测试失败时截屏。不是每个测试:D
-
有趣。我只对订单感兴趣,所以实际上你的问题就是我的答案:)
-
@GáborLipták :) 我很高兴!
-
@GáborLipták 实际上显示的顺序不正确,因为它只显示规则被实例化的时间,而不是应用规则的时间。正确的测试在 Rule 中根本没有构造函数,而是在调用前后调用
arg0.evaluate()logging。这将表明该规则是围绕@Before/@After运行的,就像在 JUnit 的 JavaDoc 中一样。
标签: java selenium webdriver junit4 junit-rule