微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在构造函数中模拟方法调用?

如何解决如何在构造函数中模拟方法调用?

我有 class1 类,它有 2 个成员变量:

classA
{
    private Boolean isEnable;
    private Config config;
   
    public classA(final Config config)
    {
        this.config = config;
        isEnable = config.getEnablingStatus();
    }

    public classB fun()
    {
        // Do something!
        // Return an object of classB!
    }
}

我想测试方法有趣,所以我必须为此编写一个测试类和一个测试方法。但是,如何在测试类中创建 classA 类型的对象时模拟方法调用 config.getEnablingStatus()

我正在考虑做这样的事情[见下面的代码]。它正确吗?但正确的做法是什么?

TestClassForClassA:

TestClassForClassA
{
    private Boolean isEnable;
    
    @Mock
    private Config config;
   
    @InjectMocks
    classA objA = new classA(config);

    @Before
    public void init() 
    {
        initMocks(this);
    }

    public void test1Fun()
    {
        // Does doing this,put the value of isEnable as true in the objA for this test?
        isEnable = true; 
        
        // Here write the code to test the method fun().
    }

    public void test2Fun()
    {
        // Does doing this,put the value of isEnable as false in the objA for this test?
        isEnable = false; 
        
        // Here write the code to test the method fun().
    }
}

解决方法

不要使用@InjectMocks

尝试这样的事情

public class TestClassForClassA {

    @Mock
    private Config config;

    private ClassA objA;

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

    @Test
    public void test1Fun() {
        Mockito.when(config.getEnablingStatus()).thenReturn(true);
        objA = new ClassA(config);
        ClassB objB = objA.fun();
        assertTrue(objB.isEnabled());
    }

    @Test
    public void test2Fun() {
        Mockito.when(config.getEnablingStatus()).thenReturn(false);
        objA = new ClassA(config);
        ClassB objB = objA.fun();
        assertFalse(objB.isEnabled());
    }

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。