Bre*_*nik 8 java junit unit-testing dependency-injection mocking
我对在JUnit测试套件中模拟对象感兴趣,但是我只遇到使用依赖注入来注入模拟对象的模拟框架.但是,我希望能够模拟类/函数,而不必像python中的@patch()那样注入那个模拟对象.
琐碎的例子:
//dependency injection
public String bar(Foo foo) {
return foo.foo(); //just pass in mock Foo object
}
//.... onto test code
Foo mockedFoo = <Mocked Foo object>;
String response = bar(mockedFoo);
assertEqual(response, <mockedFoo return value>);
//case I am looking for
public String bar() {
Foo foo = new Foo(); //how to create mock object here?
return foo.foo(); //or simply how to mock a single function?
}
//... onto test code
<force the Foo class or foo method to be mocked from here without touching bar() source code>
String response = bar();
assertEqual(response, <mocked response>);
Run Code Online (Sandbox Code Playgroud)
您可以使用 Powermock 来检测被测类,以便在new
调用时返回模拟。
你的代码看起来像这样:
RunWith(PowerMockRunner.class)
@PrepareForTest( Bar.class )
public class BarTest {
@Test
public void test(){
Foo mockedFoo = createMock(Foo.class);
//set up mockedFoo here
...
//This will make a call to new Foo() inside Bar.class
//return your mock instead of a real new one
expectNew(Foo.class).andReturn(mockedFoo);
...
replay(mockedFoo, File.class);
Bar bar = new Bar();
String response = bar.bar();
assertEqual(response, <mocked response>);
verify(mockedFoo, File.class);
}
}
Run Code Online (Sandbox Code Playgroud)