【发布时间】:2020-11-28 03:38:54
【问题描述】:
我尝试使用不同的集合参数模拟相同的方法调用。
我的问题是我没有从 Mocked-Call 中获得正确的模拟答案作为输入。
测试类:
@ExtendWith(SpringExtension.class)
public class CollectionTest {
@MockBean
private Controller c;
@BeforeEach
public void init() {
Collection<String> a = Mockito.anyCollection();
a.add("a");
Mockito.when(c.run(a)).thenReturn("a");
Collection<String> b = Mockito.anyCollection();
b.add("b");
Mockito.when(c.run(b)).thenReturn("b");
}
@Test
public void test() {
assertEquals("a", c.run(Lists.newArrayList("a"))); // DOESNT'WORK!!! Returns "b" but should "a"
assertEquals("b", c.run(Lists.newArrayList("b"))); //
}
}
控制器类:
@Service
public class Controller{
public String run(Collection<String> c) {
return "not-mocked";
}
}
我不知道为什么它不返回“a”。我试图将集合更改为字符串,但行为相同。
要执行哪些步骤才能获得以下行为?
@Test
public void test() {
assertEquals("a", c.run(Lists.newArrayList("a"))); // should return "a"
assertEquals("b", c.run(Lists.newArrayList("b"))); // should return "b"
}
我正在使用 Java Mockito "3.1" 和 Spring,但我认为 Mockito 是这里的重要信息。
【问题讨论】: