我在想,
如果在 @Before 方法中我正在初始化一个模拟对象,我不应该在 @After 中取消对它的引用吗?或者那会是多余的吗?为什么?
没有必要,JUnit 会为每个测试方法创建一个新的测试实例。
但是,如果它是静态字段,那就另当别论了,应该实现正确的生命周期,但我强烈建议您不要在 JUnit 测试中使用静态字段!而是考虑实现自己的 JUnit Runner。
而对于 TestNG,情况就不同了,因为 TestNG 创建了一个测试实例,所以你必须小心模拟的生命周期。
“无效”参考在这里不会改变任何东西。
@Before
注释方法在每个测试方法之前运行。如果您在这种方法中初始化模拟,它们将在每次测试之前重新初始化。有一个不同的注解 - @BeforeClass
,这个注解导致一个方法在执行该测试类中的任何测试方法之前只执行一次。但是,在这种情况下,“取消”引用对您没有帮助,因为您仍然需要创建一个新的模拟对象并将其引用分配给您的字段。