使用junit setup()方法和从测试本身调用方法之间的区别

时间:2017-11-20 09:29:05

标签: java junit

我尝试通过StackOverflow甚至谷歌来寻找这个,但要么我使用错误的关键字来找到我的答案,要么还没有直接答案。

我的问题是,使用setup()方法和从测试本身调用方法之间的性能或功能是否存在差异?

例如:

  1. 使用@Before注释注释的设置方法进行测试,该注释为每次测试运行调用。

    public class TestSetup extends TestCase {
        private String name;
    
        @Before
        public void setup(  ) {
            this.name = "abc";
        }
    
        @Test
        public void test1() { assertEquals("xyz", this.name); }
    
        @Test
        public void test2() { assertEquals("abc", this.name); }
    }
    
  2. 编写一个在执行前调用方法的测试。

    public class TestSetup extends TestCase {
        private String name;
    
        public void setName() {
            this.name = "abc";
        }
    
        @Test
        public void test1() {
            setName();
            assertEquals("xyz", this.name);
        }
    
        @Test
        public void test2() {
            setName();
            assertEquals("abc", this.name);
        }
    }
    
  3. 这有什么区别,除了在后一种情况下,程序员需要知道他必须为他实际想要使用它的人调用设置函数。

1 个答案:

答案 0 :(得分:0)

安装方法用于像initialization对象等对象/资源mock object,softassertions之类的前置条件。这取决于开发人员是否使用该方法。Junit/TestNg what ever framework you take all the common object s intialization/object creation will be done in setup i.e @Before annotation。此外,您知道在执行测试用例之前将调用@Before。 虽然对于简单的测试方法,它不会对您的逻辑产生任何影响,但对于具有许多测试方法的批量类,它可能会导致JVM RunTimeException空间中的related to甚至错误or PermGen方法区域你继续调用相同的方法堆栈。

为了克服这个问题,你可以在setup方法中编写一次,而不是多次调用同一个方法,除非你需要不同的逻辑。

希望你有设置方法的上下文。