我有一系列完全相互依赖的测试方法。我一直遇到将对象设置为默认状态或仅将其属性更改为null的问题。在正常的程序中,没有这样的事情发生过。将事物随机设置为最终似乎有所帮助,但我不能仅仅因为测试而修改生产代码。
将属性设置为final也意味着它不在我的代码中 - 如果我的代码改变了这些,编译器就不会编译它(我的代码中没有反射)。
在我深入研究之前,请你告诉我JUnit是否应该做这样的事情?如果是,我可以阅读哪些规则?
答案 0 :(得分:6)
JUnit不会随机向null
设置任何内容。它将事物设置为null
非常确定:在运行每个测试方法之前,会创建一个新的测试类实例。因此,所有实例变量都设置为默认值,对象引用为null
。
单元测试不应相互依赖。它们必须以任何顺序运行。如果您有相互依赖的部件,则必须将它们放在相同的测试方法中(或者以正确的顺序从测试方法中调用的单独的非测试方法)。
如果要初始化所有测试所需的数据,可以使用@Before
注释(此方法将在每个测试方法之前运行)或使用@BeforeClass
注释来注释方法(然后在所有测试方法之前运行此方法一次)。
答案 1 :(得分:1)
如果要在每次测试之前初始化某些对象,请尝试将注释@Before用于初始化函数。
请参阅http://junit.sourceforge.net/javadoc/org/junit/Before.html
答案 2 :(得分:1)
JUnit以不可预测的顺序执行测试,因此任何测试都不应该依赖于任何其他测试的执行。将测试分开是正确的做法。
为了初始化所有内容,请使用@Before注释的方法进行设置,并使用@After注释掉的方法。这些方法将在每次测试之前和之后执行,因此您可以确保测试设置相同且不会相互影响。