gpt4 book ai didi

java - Junit:如何让每个@Test方法完全隔离?

转载 作者:行者123 更新时间:2023-12-01 21:23:44 27 4
gpt4 key购买 nike

示例代码:

public class Count {
static int count;

public static int add() {
return ++count;
}
}

我希望 test1 和 test2 完全分开运行,以便它们都通过。我怎样才能完成呢?我的IDE是Intellij IDEA。

<小时/>
public class CountTest {
@Test
public void test1() throws Exception {
Count.add();
assertEquals(1, Count.count);//pass.Now count=1
}

@Test
public void test2() throws Exception {
Count.add();
assertEquals(1, Count.count);//error, now the count=2
}
}

假设 test1 在 test2 之前运行。

这只是一个简化的代码。事实上,代码更复杂,所以我不能只在 @after 方法中创建 count=0

最佳答案

没有自动重置类中所有静态变量的方法。这是您应该重构代码以停止使用静态的原因之一。

您的选择是:

  1. 重构您的代码
  2. 使用@Before注释。如果您有很多变量,这可能会成为问题。虽然编写的代码很无聊,但如果您忘记重置其中一个变量,您的其中一个测试就会失败,所以至少您有机会修复它。
  3. 使用反射动态查找类的所有成员并重置它们。
  4. Reload the class via the class loader .
  5. 重构你的类。 (我知道我之前已经提到过,但它非常重要,我认为值得再次提及)

3 和 4 的工作量很大,但收效甚微。如果您开始尝试并行运行测试,除了重构之外的任何解决方案仍然会给您带来问题。

关于java - Junit:如何让每个@Test方法完全隔离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38674569/

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