[英]Mockito: mock instance method for all instances of a class
我正在嘗試存根特定類的實例方法,以便當此Foo
類的任何實例調用此實例方法doSomething
,將返回相同的object
(請參閱下面的代碼)。 但是,mockito 不允許驗證或存根之外的任何匹配器。
Bar object = new Bar();
given(any(Foo.class).doSomething(Arg.class)).willReturn(object);
在Foo.class
:
Bar doSomething(Arg param) {
Bar bar = new Bar();
// Do something with bar
return bar;
}
我可以通過 Mockito 實現這個目標嗎? 謝謝!
如果您希望Foo
在對Foo
任何實例調用doSomething
方法時返回相同的Bar
實例,則應使用PowerMock 。 下面是一個例子:
@RunWith(PowerMockRunner.class)
@PrepareForTest(Foo.class)
public class FooMockAllInstanceTest {
@Test
public void testMockInstanceofObjectCreation() throws Exception {
Bar mockBar = PowerMockito.mock(Bar.class);
when(mockBar.sayHello()).thenReturn("Hi John!");
PowerMockito.whenNew(Bar.class)
.withNoArguments()
.thenReturn(mockBar);
Foo myFooOne = new Foo();
assertEquals(mockBar, myFooOne.doSomething("Jane"));
Foo myFooTwo = new Foo();
assertEquals(mockBar, myFooTwo.doSomething("Sarah"));
Baz bazOne = new Baz();
assertEquals(mockBar, bazOne.doSomething("Sam"));
Baz bazTwo = new Baz();
assertEquals(mockBar, bazTwo.doSomething("Nina"));
}
}
即使調用Baz
此示例也將返回相同的Bar
對象。 這是Baz
課,
public class Baz {
public Bar doSomething(String name) {
Foo foo = new Foo();
return foo.doSomething(name);
}
}
更新 2
還有另一種稍微好一點的方法來使用 PowerMock 進行測試。 來了,
@Test
public void testStubbingMethod() throws Exception {
Bar mockBar = PowerMockito.mock(Bar.class);
when(mockBar.sayHello()).thenReturn("Hi John!");
PowerMockito.stub(PowerMockito.method(Foo.class, "doSomething",
String.class)).toReturn(mockBar);
Foo myFooOne = new Foo();
assertEquals(mockBar, myFooOne.doSomething("Jane"));
Foo myFooTwo = new Foo();
assertEquals(mockBar, myFooTwo.doSomething("Sarah"));
Baz bazOne = new Baz();
assertEquals(mockBar, bazOne.doSomething("Sam"));
Baz bazTwo = new Baz();
assertEquals(mockBar, bazTwo.doSomething("Nina"));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.