大佬教程收集整理的这篇文章主要介绍了Mockito,@ InjectMocks具有最终字段的奇怪行为,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
您正在使用@Injectmocks
for
注入。只要mockito发现未初始化的字段(空),这将起作用。JUnit在每次测试之前都会创建一个新的测试类实例,因此JUnit粉丝(像我一样)将永远不会遇到此类问题。TestNg不会创建测试类的新实例。它保持测试方法之间的状态,因此当mockitoAnnotations.initmocks(this)
第二次调用时,mockito将发现已经初始化的主题 字段并尝试使用 注入。另一方面,这将起作用,直到该字段不是最终的。
这是一个错误吗?我相信不是-这是API设计的自然结果。一些解决方法是添加
this.subject = null;
用某种@AfterMethod
方法。
我看到了我认为是错误的行为。@Injectmocks似乎并没有在每种测试方法之前创建一个新的测试主题。就像@mock一样。在下面的示例中,如果Subject.section是最后一个,则@Test失败。如果不是最后两个都通过。我当前的解决方法是使用@BeforeClass,但这并不理想。
Subject.java:
package inject_mocks_test;
public class Subject {
private final Section section;
public Subject(Section section) {
this.section = section;
}
public Section getSection() {
return section;
}
}
Section.java:
package inject_mocks_test;
public class Section {}
SubjectTest.java
package inject_mocks_test;
import org.mockito.Injectmocks;
import org.mockito.mock;
import org.mockito.mockitoAnnotations;
import org.testng.Annotations.beforeMethod;
import org.testng.Annotations.Test;
import static org.testng.Assert.assertEquals;
public class SubjectTest {
@mock
Section section;
@Injectmocks
Subject subject;
@BeforeMethod
public void setup() {
mockitoAnnotations.initmocks(this);
}
@Test
public void test1() {
assertEquals(section,subject.getSection());
}
@Test
public void test2() {
assertEquals(section,subject.getSection());
}
}
干杯。
以上是大佬教程为你收集整理的Mockito,@ InjectMocks具有最终字段的奇怪行为全部内容,希望文章能够帮你解决Mockito,@ InjectMocks具有最终字段的奇怪行为所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。