gpt4 book ai didi

java - 如何以及何时使用 Mockito Annotations 和 jUnit 进行清理

转载 作者:行者123 更新时间:2023-12-02 04:17:49 26 4
gpt4 key购买 nike

我目前在我的一个相当大的项目中的一些单元测试中遇到了一些内存问题。在今天的拉头发和研究过程中,我逐渐意识到,这似乎与物体的清理速度并不总是像我认为应该清理的那么快有关。我开始研究“cleanup mockito”和“cleanup junit”,并发现了一些关于如何使用 @Before@After (以及它们的 *类版本)来完成您不希望在每个单元测试中完成的激烈事情。这让我开始思考 Mockito 的 @Mock@InjectMocks 注释。

有人可以向我详细描述一下在 Maven 构建期间如何在内存中处理下面的类变量吗?对象是在单元测试之前、期间还是之后创建的?最后一个单元测试完成后,对象是否立即被销毁?我应该使用 @After 将所有类变量设置为 null 吗?

多次感谢。这是我可能使用的测试用例示例:

@RunWith(MockitoJUnitRunner.class)
public class thisCustomTest {

@Mock
MyCustomSpringBean myCustomerSpringBean;

@InjectMocks
MyBeanToTest myBeanToTest;

@Before
public void config() {
MockitoAnnotations.initMocks(this);
}

@Test
public void someTest() {
//code here
}

}

最后做一个快速总结/总结,我的主要问题是我是否应该利用像 @After 这样的东西来清理类变量,或者我应该简单地离开那些用于 Java 正常范围垃圾收集的...

我的清理想法:

@After
public void cleanup() {
mockedClassVariable = null;
injectedVariable = null;
}

最佳答案

JUnit 在运行每个测试方法之前创建单元测试类的新实例。一旦实例被创建,它的@Before 注释方法就会被执行。然后执行测试方法。然后,无论测试方法中发生什么(成功、失败或错误),@After 注解的方法都会运行。

因此,在这种特殊情况下,MockitoAnnotations.initMocks(this) 在每个测试方法之前执行,每次都会创建一个新的模拟,每次都会创建一个新的 MyBeanToTest,并将模拟注入(inject)到要测试的 bean。

在测试方法执行后,这些 bean 以及引用它们的测试实例将有资格进行 GC。在清理方法中将它们设置为 null 没有任何作用。

关于java - 如何以及何时使用 Mockito Annotations 和 jUnit 进行清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17850906/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com