Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Junit:如何使每个@Test方法完全隔离?_Java_Unit Testing_Intellij Idea_Junit - Fatal编程技术网

Java Junit:如何使每个@Test方法完全隔离?

Java Junit:如何使每个@Test方法完全隔离?,java,unit-testing,intellij-idea,junit,Java,Unit Testing,Intellij Idea,Junit,示例代码: public class Count { static int count; public static int add() { return ++count; } } 我希望test1和test2完全分开运行,以便它们都通过。我怎么才能完成呢?我的IDE是Intellij IDEA 假设test1在test2之前运行 这只是一个简化的代码。事实上,代码更复杂,因此我不能在@after方法中仅使count=0。在每次测试之前使用注释重新初

示例代码:

public class Count {
    static int count;

    public static int add() {
       return ++count;
    } 
}
我希望test1和test2完全分开运行,以便它们都通过。我怎么才能完成呢?我的IDE是Intellij IDEA


假设test1在test2之前运行

这只是一个简化的代码。事实上,代码更复杂,因此我不能在
@after
方法中仅使
count=0

在每次测试之前使用注释重新初始化变量:

@Before
public void resetCount(){
    Count.count = 0;
}
在每次测试之前,使用注释重新初始化变量:

@Before
public void resetCount(){
    Count.count = 0;
}

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

你的选择是:

  • 重构你的代码
  • 使用@Before注释。如果你有很多变量,这可能是个问题。虽然编写代码很无聊,但如果您忘记重置其中一个变量,您的一个测试将失败,因此至少您有机会修复它
  • 使用反射动态查找类的所有成员并重置它们
  • 重构你的类。(我知道我以前提到过,但它太重要了,我觉得值得再提一次)

  • 3号和4号都是为了不多的收益而做的大量工作。如果您开始尝试并行运行测试,除重构之外的任何解决方案都会给您带来问题。

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

    你的选择是:

  • 重构你的代码
  • 使用@Before注释。如果你有很多变量,这可能是个问题。虽然编写代码很无聊,但如果您忘记重置其中一个变量,您的一个测试将失败,因此至少您有机会修复它
  • 使用反射动态查找类的所有成员并重置它们
  • 重构你的类。(我知道我以前提到过,但它太重要了,我觉得值得再提一次)

  • 3号和4号都是为了不多的收益而做的大量工作。如果您开始尝试并行运行测试,除了重构之外的任何解决方案都会给您带来问题。

    但是,这是为了什么?基本上,您正在测试静态方法,所以堆上并没有特定对象的实例。我的建议是重构代码,不要使用静态方法。另一种解决方案是在注释之前使用
    @并重置所有需要的值。但是,这样做的目标是什么?基本上,您正在测试静态方法,所以堆上并没有特定对象的实例。我的建议是重构代码,不要使用静态方法。另一个解决方案是在注释之前使用
    @并重置所有需要的值。如果我有这么多像
    Count.Count
    ?有没有更好的方法来提供一个清理环境?@guo只需清理之前注释的方法中的所有内容。如果您这样做了,请不要忘记选择resetCount以外的其他名称。如果我有这么多类似于
    Count.Count
    ?有没有更好的方法来提供一个清理环境?@guo只需清理之前注释的方法中的所有内容。如果您这样做了,请不要忘记选择resetCount以外的其他名称。