因此,有一个巨大的java测试框架项目与各种硬件组件一起工作。问题是:@After方法在@Before方法中,如果出现异常/ hw故障等,则无法决定将哪些资源设置回相应的原始状态/值。这可能会危及后续依赖于相同hw元素状态的测试用例(大多数是假阴性)。
我想分别在遇到错误之前撤消@BeforeMethod中发生的所有对象修改。这样我就可以使其他测试更容易出错(获得漏报的可能性更小)。
为每个套件定义一个原子状态不是一个选项(在我看来) - 太麻烦,需要大量的代码修改,因此为每个对象设置原子状态可能需要比它应该花费更多的时间。 / p>
有什么建议吗?你知道这类问题有什么好的测试指南/模式吗?
编辑:
TestClass1{
@BeforeMethod
method(){
resource1.setfoo("foo");
resource1.setbar("bar");
...
resource7.setfoo("bar"); // -> hw error occurs, testmethod1 is not run
...
}
testmethod1(){
foo.bar();
}
}
TestClass2{
testmethod2(){
assertTrue(resource1.doSomething()); /*fails because some combination of
the resource modifications that happened in the previous @Beforemethod
in TestClass1 changed the hardware operation in some way. */
}
}
答案 0 :(得分:0)
只要有明确的方法来反转资源状态,就没有必要处理原子状态。例如,在@BeforeMethod
中添加计数器和try / catch块可能就足够了:
@BeforeMethod
void method(){
int setupStep = 0;
try {
resource1.setfoo("foo");
setupStep++; //1
resource1.setbar("bar");
setupStep++; //2
...
resource7.setfoo("bar"); // -> hw error occurs, testmethod1 is not run
setupStep++; //99
...
} catch (Exception e) {
switch (setupStep) {
case 99:
resource7.setfoo("bar_orig");
...
case 2:
resource1.setbar("bar_orig");
case 1:
resource1.setfoo("foo_orig");
default:
// Failed on first step
}
throw e; //Make sure the set-up method fails
}
}
请注意使用switch
块的降低功能。