模拟内部类的局部变量 - 使用Mockito / PowerMock



i m试图模拟InnerClass(class2.Class)的本地变量,但它不起作用。我在下面分享我的代码,请帮助我运行第二个测试柜。

class1.java 包含 class2 作为内class

public final class Class1 {
    Class2 class2 = new Class2();
    public String echoString(String s) {
        return class2.echoString2(s);
    }
    public class Class2 {
        public String echoString2(String s) {
            Class3 class3 = new Class3(null);
            System.out.println("######## Class3 = " + class3);
            return class3.getResult(s);
        }
    }
}

class3.java

public class Class3 {
    private String data;
    public Class3(String data){
        this.data=data;
    }
    public String getResult(String s) {
        return data;
    }
}

以下是我的测试案例我想运行第二个测试案例 - 请帮助

@PrepareForTest({ Class1.class, Class2.class, Class3.class })
public class MockTest extends PowerMockTestCase {
    String testInput = "input";
    String mockedResult = "Mocked - " + testInput;
    @InjectMocks
    private Class1 tested;
    @Mock
    Class2 tested2;
    @BeforeMethod
    public void InjectingMocks() {
        MockitoAnnotations.initMocks(this); // Creates a fresh set of mocks
    }
    @Test
    public void mockTest() {
        PowerMockito.doReturn(mockedResult).when(tested2)
                .echoString2(testInput);
        Assert.assertEquals(tested.echoString(testInput), mockedResult);
    }
    @Test
    public void mockTest2() throws Exception {
        Class3 c3 = PowerMockito.mock(Class3.class);
        PowerMockito.whenNew(Class3.class).withAnyArguments().thenReturn(c3);
        PowerMockito.doReturn(mockedResult).when(c3).getResult(testInput);
        Assert.assertEquals(tested.echoString(testInput), mockedResult);
    }
}

它显示错误

PASSED: mockTest
FAILED: mockTest2
java.lang.AssertionError: expected [Mocked - input] but found [null]

请提供帮助 - 我将如何成功运行它,而无需对实际代码进行任何重大更改。

怎么样:

@Test
    public void mockTest2() throws Exception {
        Class3 c3 = PowerMockito.mock(Class3.class);
        PowerMockito.whenNew(Class3.class).withAnyArguments().thenReturn(c3);
        PowerMockito.doReturn(mockedResult).when(c3).getResult(testInput);
        tested = new Class1();
        Assert.assertEquals(tested.echoString(testInput), mockedResult);
    }

我可能是错的,但我认为问题可能是在用PowerMockito嘲笑Class3构造函数之前,将调用新的class3(null)。

最新更新