如何为语句编写junit

if (!messageMap.isEmpty())

其中messageMapTreeMap
我写了如下
PowerMockito.when(!messageMap.isEmpty()).thenReturn(true);

但是此代码无法正常工作。

最佳答案

您不清楚要什么。

当您只想确保生产调用使成为对isEmpty()的调用时,理想的测试方法是将简单地将空映射和非空映射传递给被测代码。

含义;您可以执行以下操作:

@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模拟并将其配置为:
Mockito.when(messageMap.isEmpty()).thenReturn(false);

但是:这将是一个坏习惯。您只模拟无法轻松控制的对象。 map 非常容易控制;只需向其中推送一些内容(或将其留空)即可。因此,与其传递配置为空或包含值的模拟映射,不如传递真实映射;为空或包含一些值!

09-26 03:37