如何为语句编写junit
if (!messageMap.isEmpty())
其中
messageMap
是TreeMap
。我写了如下
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 非常容易控制;只需向其中推送一些内容(或将其留空)即可。因此,与其传递配置为空或包含值的模拟映射,不如传递真实映射;为空或包含一些值!