gpt4 book ai didi

java - 并行运行 junit 测试时的竞争条件

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:13:38 28 4
gpt4 key购买 nike

我想知道如果我并行运行我的测试并且两个测试(如下)共享一个实例变量,它会不会有一些竞争条件?所以我的测试类使用 SpringJunit4ClassRunner 运行,我有 2 个测试方法 a() 和 b(),变量 state 将从每个测试中修改或重新分配,doSomethingWithState() 将使用变量state 并将其传递给测试方法。我知道 maven-surefire-plugin您可以在方法级别运行它,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
}
}

最佳答案

我想唯一合理的答案是:取决于 ...您的确切上下文和代码库。

竞争条件的本质是:您有多个线程 操作(“写入”)共享 数据。您冗长的问题归结为正是这样的设置。因此,您上面描述的设置中存在竞争条件的高潜力

然后:如果您谈论的是生产代码中的方法或某些测试框架调用的方法,这没有任何区别。因为比赛条件不关心那个。他们只“关心”多个线程写入共享数据。

这才是最重要的!

关于java - 并行运行 junit 测试时的竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39983162/

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