我想知道如果我并行运行测试并且两个测试(如下)共享一个实例变量,是否会有一些竞争条件?所以我的测试类使用 SpringJunit4ClassRunner 运行,并且我有 2 个测试方法 a() 和 b(),变量state
将从每个测试中修改或重新分配,并且 doSomethingWithState() 将使用该变量state
并将其传递给测试方法。我知道与maven-surefire-插件 http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#parallel您可以在方法级别运行它,a() 和 b() 都将分配给一个线程并并行运行。
@RunWith(SpringJUnit4ClassRunner.class)
public class TestA {
private Object state;
@Test
public void a() {
stateObjectA();
doSomethingWithState();
assertion();
}
@Test
public void b() {
stateObjectB();
doSomethingWithState();
assertion();
}
private void stateObjectA() {
// do some mocking and setup state
}
private void stateObjectB() {
// do some mocking and setup state
}
private void doSomethingWithState() {
// use the state object and feed into the testing method
}
}
我想唯一合理的答案是:depends...根据您的确切上下文和代码库。
竞争条件的本质是:你有多个线程操纵(“写入”)shared数据。您的冗长问题可以归结为正是这样的设置。所以有高潜力对于您上面描述的设置中的竞争条件。
然后:如果您谈论的是生产代码中的方法或某些测试框架调用的方法,则没有任何区别。因为竞争条件并不关心这一点。他们只“关心”多个线程写入共享数据。
这就是这里最重要的!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)