Junit 和 Mockito 如何使用模拟参数实例化模拟类

问题描述 投票:0回答:1

我对mockito不太熟悉。我正在尝试模拟在另一个类中实例化的类的结果。

public class TestClass {
    @Test
    public void testSomething() {
        SomethingConfig somethingConfigMock = mock(SomethingConfig.class);
        
        final ClassBeingTested cbt = new ClassBeingTested(
            parameter1,
            parameter2,
            somethingConfigMock
        );
        cbt.getResults();
    }
}

public class ClassBeingTested {

    public ClassBeingTested(parameter1, paramater2, somethingConfig) {
        this.parameter1 = parameter1;
        this.parameter2 = parameter2;
        this.somethingConfig = somethingConfig;
        ...
    }

    public Results getResults() {
        // do lots of stuff
        OtherClassToTest otherClassToTest = new OtherClassToTest(somethingConfig);
        String s = otherClassToTest.getSomeString();
        // do lots of stuff
    }

}

因此,在这个示例中,我只想期望一旦使用 SomethingConfigMock 实例化 OtherClassBeingTested ,它将返回 getSomeString() 等方法的通用结果。 在我看来,它看起来像

when(new OtherClassToTest(somethingConfigMock)).thenReturn(otherClassToTestMock);
when(otherClassToTestMock.getSomeString()).thenReturn("genericString");

我是否以错误的方式看待这个问题,或者是否有一种简单的方法可以在不进行重大重构的情况下做到这一点?

我尝试过只是嘲笑一些东西ConfigMock,但在某个时刻我总是在OtherClassToTest中得到一个NullPointerException。

java junit mocking mockito
1个回答
0
投票

您正在模拟 SomethingConfig 类实例,因此这就是您应该使用“when thenReturn”等进行配置的内容。其他类是真实的。
OtherClassToTest最终会调用SomethingConfig实例的一些方法。这就是你的模拟配置发挥作用的地方。
代码中没有配置的模拟实例当前仅返回空值(我认为是空集合)。显然,这就是你获得 NPE 的原因。

所以你需要

when(somethingConfigMock.aMethodCalledByOtherClass()).thenReturn(somethingYouNeedForATest);

© www.soinside.com 2019 - 2024. All rights reserved.