Junit会在每次测试方法调用时重新初始化类吗? - java

当我运行以下代码时,两个测试用例都变为现实:

import static junit.framework.Assert.assertEquals;

import org.junit.Test;

public class MyTest{
    private int count;

    @Before
    public void before(){
        count=1;
    }

    @Test
    public void test1(){
        count++;
        assertEquals(2, count); 
    }

    @Test
    public void test2(){
        count++;
        assertEquals(2, count); 
    }
}

预期的行为

  • test1-成功
  • test2-失败(预期计数将变为3)
  • 实际行为

  • test1-成功
  • test2-成功
  • 为什么在每次测试方法调用中junit都是reinitializing class/variable
    它是junit中的错误或有意提供。

    参考方案

    每种测试方法的MyTest的新实例

    对于每种测试方法,将创建MyTest的新实例,这就是Junit的行为。

    因此,在您的情况下,这两种方法的变量count的值都将为1,因此两种测试方法的count++的值都将为2,因此测试用例将通过。

    public class MyTest{
       public MyTest(){
          // called n times
          System.out.println("Constructor called for MyTest");
       }
    
       @Before //called n times
       public void setUp(){
          System.out.println("Before called for MyTest");
       }
    
       //n test methods
    }
    

    如果您使用2种测试方法执行上述代码:

    输出将是:

    Constructor called for MyTest
    Before called for MyTest
    //test execution
    Constructor called for MyTest
    Before called for MyTest
    

    在没有静态测试数据库的情况下,如何使DAO类的单元测试变脆? - java

    这是scanario:我正在研究一个DAO对象,该对象使用休眠条件API来形成许多复杂的查询,以对数据库执行某些任务(例如,跨多个字段的关键字搜索)。我们需要对此进行单元测试,以确保所生成的查询在各种情况下都是正确的。测试它的一种方法(可能是更好的方法)是通过在最后检查休眠条件并模拟数据库交互来正确创建休眠条件。但是,这是不理想的,因为它首先是一种作弊行为(…

    Java:线程池如何将线程映射到可运行对象 - java

    试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

    JAVA:字节码和二进制有什么区别? - java

    java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

    java:继承 - java

    有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

    Java:BigInteger,如何通过OutputStream编写它 - java

    我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…