public class TestClass {
@Mock
private SomeObject someObject;
@InjectMocks
private SubjectOfTesting subject;
@Before
public void setupMock() {
when(someObject.doSomething(eq("Meh")).thenReturn("Boing");
when(someObject.doSomething(eq("Foo")).thenReturn("Bar");
when(someObject.doSomething(any()).thenReturn("?!"); // <-- This any()
}
@Test
public void testSomethings() {
subject.setArgument("Meh");
String result = subject.useSomeObject();
assertEquals("result is not equal", "Boing", result);
}
// Multiple tests with other arguments.
}
给定上面的类,我可以同时使用any()
和其他类吗?它将执行如我所料,在返回"Boing"
或者"Bar"
还是"?!"
取决于我在我的测试提供了论据?
编辑
测试了:
@RunWith(MockitoJUnitRunner.class)
public class TempTest {
@Mock
private SomeObject someObject;
@InjectMocks
private Subject subject = new Subject();
@Before
public void setupMock() {
when(someObject.doSomething(eq("Meh"))).thenReturn("Boing");
when(someObject.doSomething(eq("Foo"))).thenReturn("Bar");
when(someObject.doSomething(any())).thenReturn("?!"); // <-- This any()
}
@Test
public void testSomethingsMeh() {
subject.setArgument("Meh");
String result = subject.useSomeObject();
assertEquals("result is not equal", "Boing", result);
}
@Test
public void testSomethingsFoo() {
subject.setArgument("Foo");
String result = subject.useSomeObject();
assertEquals("result is not equal", "Bar", result);
}
@Test
public void testSomethingsAny() {
subject.setArgument("Any");
String result = subject.useSomeObject();
assertEquals("result is not equal", "?!", result);
}
private interface SomeObject {
String doSomething(String argument);
}
private class Subject {
private SomeObject someObject;
private String argument;
public Subject() {
}
public void setSomeObject(final SomeObject someObject) {
this.someObject = someObject;
}
public String useSomeObject() {
return this.someObject.doSomething(this.argument);
}
public void setArgument(final String argument) {
this.argument = argument;
}
}
}
结果(两次失败,另一次失败):
org.junit.ComparisonFailure: result is not equal expected:<[Bar]> but was:<[?!]>
org.junit.ComparisonFailure: result is not equal expected:<[Boing]> but was:<[?!]>
有没有办法使这些测试通过?
最后一个when
将覆盖所有以前的状态。但是,如果更改存根的顺序,则可以实现所需的结果。这将按您期望的那样工作。
when(someObject.doSomething(any()).thenReturn("?!");
when(someObject.doSomething(eq("Meh")).thenReturn("Boing");
when(someObject.doSomething(eq("Foo")).thenReturn("Bar");
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句