我想知道如果我并行运行测试并且两个测试(下面)共享实例变量会有一些竞争条件吗?所以我的测试类运行SpringJunit4ClassRunner,我有2个测试方法a()和b(),变量state
将被修改或重新分配每个测试,而doSomethingWithState()将使用变量{{1并将其传递给测试方法。我知道maven-surefire-plugin你可以在方法级别运行它,a()和b()都将被分配给一个线程并并行运行。
state
答案 0 :(得分:2)
我想唯一合理的答案是:取决于 ...在您的确切上下文和代码库中。
如果竞争条件是:你有多个线程操纵("写")共享数据。你冗长的问题归结为这样的设置。因此,您在上述设置中的竞争条件存在高潜力。
然后:如果您正在谈论生产代码中的方法或某些测试框架调用的方法,那么它并没有任何区别。因为竞争条件并不关心。他们只关心"关于多个线程写入共享数据。
这就是重要的事情!
答案 1 :(得分:0)
你必须考虑两件事:
如果需要使用实例变量,则在加载前对它们进行实例化(Junit4提供@Before,@ After注释,以及@BeforeClass和@AfterClass用于静态变量)。
Junit不保证每次都会以相同的顺序运行测试用例,因此每个测试必须与其他测试分开编码。
另一个显而易见的观点是,你不能根据其他人的结果来考虑测试。在模拟集成测试的东西时考虑到这一点,也许测试将开始随机失败,你不会知道原因。