程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Mockito,@ InjectMocks具有最终字段的奇怪行为大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决mockito,@ Injectmocks具有最终字段的奇怪行为?

开发过程中遇到mockito,@ Injectmocks具有最终字段的奇怪行为的问题如何解决?下面主要结合日常开发的经验,给出你关于mockito,@ Injectmocks具有最终字段的奇怪行为的解决方法建议,希望对你解决mockito,@ Injectmocks具有最终字段的奇怪行为有所启发或帮助;

您正在使用@Injectmocksfor 注入。只要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,请注明来意。
标签:@