ddo*_*lce 15 java junit mockito
我正在尝试存根特定类的实例方法,以便当此类的任何实例Foo调用此实例方法时doSomething,object返回相同的内容(请参阅下面的代码).但是,mockito不允许任何匹配者在验证或存根之外.
Bar object = new Bar();
given(any(Foo.class).doSomething(Arg.class)).willReturn(object);
Run Code Online (Sandbox Code Playgroud)
并在Foo.class:
Bar doSomething(Arg param) {
Bar bar = new Bar();
// Do something with bar
return bar;
}
Run Code Online (Sandbox Code Playgroud)
我可以通过Mockito实现这一目标吗?谢谢!
这应该工作:
public class FooTest {
@Mock
private Foo foo;
...
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testSomething() {
Bar object = new Bar();
when(foo.doSomething(any(Any.class))).thenReturn(object);
...
}
}
Run Code Online (Sandbox Code Playgroud)
更新1
如果要在的任何实例上调用method 时返回相同的实例,则应使用PowerMock。这是一个例子:FooBardoSomethingFoo
@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"));
}
}
Run Code Online (Sandbox Code Playgroud)
Bar即使Baz被调用,此示例也将返回相同的对象。这是Baz课程
public class Baz {
public Bar doSomething(String name) {
Foo foo = new Foo();
return foo.doSomething(name);
}
}
Run Code Online (Sandbox Code Playgroud)
更新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"));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11658 次 |
| 最近记录: |