gpt4 book ai didi

java - Java 中的可逆资源修改

转载 作者:行者123 更新时间:2023-11-28 20:50:07 27 4
gpt4 key购买 nike

因此,有一个巨大的 java 测试框架项目与各种硬件组件一起工作。问题是:@Aftermethod 不能动态地决定在@Beforemethod 中给定异常/硬件故障等将哪些资源设置回其相应的原始状态/值。这可能会危及依赖相同硬件元素状态的后续测试用例(主要是漏报)。

我分别想把遇到错误前@BeforeMethod 中发生的所有对象修改都反转过来。这样我就可以使其他测试更容易出错(得到假阴性的机会更少)。

为每个套件定义一个原子状态不是一个选项(在我看来)- 太麻烦了,需要大量的代码修改,因此为每个对象设置原子状态可能会花费比它应该花费更多的时间。

有什么建议吗?您知道针对此类问题的任何好的测试指南/模式吗?

编辑:

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. */
}

}

最佳答案

没有必要去处理原子状态,只要有一个确定的方法来反转资源的状态即可。例如,在 @BeforeMethod 中添加一个计数器和一个 try/catch block 可能就足够了:

@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 block 的 fall through 功能的使用。

关于java - Java 中的可逆资源修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50235915/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com