isEmpty()检查mockito

时间:2017-01-18 07:04:05

标签: junit mockito powermockito

如何为声明

编写junit
if (!messageMap.isEmpty())

其中messageMapTreeMap。 我写了如下,

PowerMockito.when(!messageMap.isEmpty()).thenReturn(true);

但是这段代码无效。

3 个答案:

答案 0 :(得分:1)

目前尚不清楚你要求的是什么。

如果您只是想确保生产调用使调用isEmpty(),那么理想的测试方法就是传递空和非-empty映射到您测试的代码。

含义;你做了类似的事情:

@Test
public void testWithEmptyMap() {
  UnderTest underTest = new UnderTest(Collections.emptyMap());
  assertThat(underTest.foo(), is(whatever));

@Test
public void testWithFilledMap() {
  UnderTest underTest = new UnderTest(Collections.singletonMap(key, value));
  assertThat(underTest.foo(), is(somethingElse));

换句话说:最佳测试方式无需嘲笑。你给代码测试不同的输入;并且断言您获得了不同输入值的预期结果。

但是,当然,有时您必须控制如何将模拟对象传递给您测试的代码;在这种情况下,是的,您实际上可以创建一个messageMap mock并将其配置为:

Mockito.when(messageMap.isEmpty()).thenReturn(false);

但是:那将是不好的做法。您只能模拟无法轻松控制的对象。地图非常容易控制;只需将一些内容推入其中(或将其留空)。因此,不是传递一个配置为空或包含值的模拟地图...传递一个真实的地图;要么为空,要么包含一些值!

答案 1 :(得分:0)

通常你不应该模拟任何util类(List,Map或Set)。你可以通过以下两种方法编写测试用例

方法1:如果你想让messageMap.isEmpty()返回true,那么创建空树对象,如下所示。

Map<K, V> messageMap = new TreeMap<>();

方法2:如果你想让messageMap.isEmpty()返回false,那么按下面的方式创建树对象。

    Map<K, V> messageMap = new TreeMap<>();
     messageMap.put(k1,v1);
     messageMap.put(k2,v2);

并且只是将messageMap对象传递给实际的类方法,它应该可以正常工作。

希望这很有用。

答案 2 :(得分:0)

你是在试图嘲笑电话还是做出断言?

如果是模拟,你可以写:

Mockito.when(messageMap.isEmpty()).thenReturn(false);

如果有断言:

Assert.assertTrue(messageMap.isEmpty());