繁体   English   中英

如何控制 JUnit 是否创建正在测试其行为的类的实例?

[英]How can I control whether JUnit creates an instance of the class whose behaviour is being tested?

我注意到 JUnit 隐式地​​创建了我的测试类的一个实例。 我已经向构造函数添加了自己的调用,这不会阻止 JUnit 创建实例; 最终结果是创建了两个实例,如下面的控制台输出所示。 我觉得这很令人费解。 为什么会发生这种情况,我如何控制/阻止 JUnit 创建实例? 谷歌搜索“junit 隐式对象创建”没有显示任何内容,但我能够通过调试测试看到调用构造函数的位置。 我不明白的是为什么会发生这种情况,什么时候我们有自己的地方可以做,以及如何防止它发生。 我在日食光子中使用 JUnit 4。 谢谢。

public class MainTest extends Main {

    static Main m;

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        System.out.println("setUpBeforeClass");
        m = new Main();

    }

    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        System.out.println("tearDownAfterClass");
    }

    @Before
    public void setUp() throws Exception {
        System.out.println("setup");
    }

    @After
    public void tearDown() throws Exception {
        System.out.println("tearDown");
    }

    @Test
    public void testAdd() {
        assertEquals(8,m.add(3,5));
    }

}

控制台输出:

setUpBeforeClass
Main()
Main()
setup
tearDown
tearDownAfterClass

您的测试用例扩展了 Main 类,这意味着在创建 MainTest 类和显式调用new Main()调用构造函数,删除extends Main并且您会很好

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM