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:<[?!]>
有没有办法让这些测试通过?
答案 0 :(得分:1)
最后when
将覆盖所有上一个。但是,如果更改了存根顺序,则可以获得所需的结果。这将按预期工作。
when(someObject.doSomething(any()).thenReturn("?!");
when(someObject.doSomething(eq("Meh")).thenReturn("Boing");
when(someObject.doSomething(eq("Foo")).thenReturn("Bar");