在junit测试中的模拟方法

时间:2015-05-27 16:43:53

标签: java junit mockito powermock

我必须为某些方法进行一些jUnit测试(使用模拟),但我无法更改源代码。是否有可能在没有更改源代码的情况下更改函数的行为(可能使用mocks)?

看一个直截了当的例子: 类AB是源代码(无法更改它们)。我想在run()中调用A方法时更改B方法的行为。有什么想法吗?

public class A {
    public String run(){
        return "test";
    }
}

public class B extends A {
    public void testing() {
        String fromA = run(); //I want a mocked result here
        System.out.println(fromA);
    }
}

public class C {
    B mockB = null;

    @Test
    public void jUnitTest() {
        mockB = Mockito.mock(B.class);

        // And here i want to call testing method from B but with a "mock return" from run()         
    }
}

1 个答案:

答案 0 :(得分:1)

您可以使用mockito的spy()方法创建部分模拟。所以你的测试类看起来像

public class C {

   @Test
   public void jUnitTest(){
       B mockB = spy(new MockB());

       when( mockB.run() ).thenReturn("foo");

       mockB.testing();
   }
}

这假定您要模拟的方法未声明为final。