有没有理由将对象创建放在setUp()
内而不是实例变量声明中?
我已经在书中看到过这种方式,但效果是一样的,我不确定它是否是出于最佳实践原因,因为早期版本的Junit没有为每个测试实例化对象(see here),或者它只是一种风格的东西。
答案 0 :(得分:3)
如果相关对象的实例化不依赖于外部因素,则可以立即声明并定义它。但是,它通常取决于其他因素(例如,单例*的初始化),或者需要构造函数参数 - 其中一些甚至可能依赖于测试 - 或者它的初始化需要多个步骤。然后你必须将实例化推迟到setup方法,甚至推迟到测试方法本身。
请注意,JUnit会创建测试类的新实例,因此无论如何都会为每个测试方法执行创建其数据成员的新实例。因此,如果您没有上面提到的依赖项,从语义上说,在声明点或安装方法中实例化成员之间没有区别。
* 这是单身人士不喜欢的原因之一。但是,通常你仍然拥有它们,特别是在遗留代码中。