【发布时间】:2015-04-08 10:43:04
【问题描述】:
我想在我的 setUp 方法中创建一个模拟,但在每个测试方法中定义具体的返回值。这有可能吗?
例如:
private List<Long> list;
@Before
public void setUp() {
when(mock.xxx()).thenReturn(list);
}
@Test
public void testEmptyList() {
list = new ArrayList<Long>();
// method call
}
@Test
public void testWithOneElement() {
list = Arrays.asList(Long.valueOf(125L));
// method call
}
编辑: 我能有的最好的情况是:
private List<Long> list = new ArrayList<Long>();
@Before
public void setUp() {
when(mock.xxx()).thenReturn(list);
}
@Test
public void testEmptyList() {
// method call
}
@Test
public void testWithOneElement() {
list.add(Long.valueOf(123L));
// method call
}
由于 Java 通过引用传递值,只要我们不为列表分配新列表,我们就可以添加值,并且 mock 将使用更新的列表。 但是,即使更改了 ObjectId,这种行为是否也可能发生?所以我模拟了一个方法调用,但定义了稍后返回什么?
例如:
private List<Long> list;
@Before
public void setUp() {
when(mock.xxx()).thenReturn(list);
}
@Test
public void testEmptyArrayList() {
list = new ArrayList<Long>();
// method call
}
@Test
public void testEmptyLinkedList() {
list = new LinkedList<Long>();
// method call
}
【问题讨论】:
-
您可以将
when(mock.xxx()).thenReturn(list);分别添加到您的两个测试用例中,而不是在 setUp() 中。然后在 testEmpty 中返回一个空列表并在 testWithOneElement 中返回一个元素的列表 -
-
显然我知道...我明确提出了这个问题,所以我不必单独模拟,因为我有很多测试方法,而不仅仅是2...
标签: java junit mocking mockito junit4