Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java junit测试中的模拟方法_Java_Junit_Mockito_Powermock - Fatal编程技术网

Java junit测试中的模拟方法

Java junit测试中的模拟方法,java,junit,mockito,powermock,Java,Junit,Mockito,Powermock,我必须对一些方法进行一些jUnit测试(使用mock),并且我不能更改源代码。有没有可能在不更改源代码的情况下更改函数的行为(可能带有mock) 看看一个简单的例子: 类A和B是源代码(不能更改它们)。我想在B中调用run()方法时,将其行为从A更改为run()。有什么想法吗 public class A { public String run(){ return "test"; } } public class B extends A { public

我必须对一些方法进行一些jUnit测试(使用mock),并且我不能更改源代码。有没有可能在不更改源代码的情况下更改函数的行为(可能带有mock)

看看一个简单的例子: 类
A
B
是源代码(不能更改它们)。我想在
B
中调用
run()
方法时,将其行为从
A
更改为
run()。有什么想法吗

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()         
    }
}

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

public class C {

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

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

       mockB.testing();
   }
}

这假设您要模拟的方法没有声明为final。

请发布至少可编译的示例代码。