【发布时间】:2016-12-06 10:15:37
【问题描述】:
奥拉,
我正忙着写一个单元测试,比如
monitor.severe(mock(MonitorEventType.class), anyString());
当我执行这个时,我得到:
Invalid use of argument matchers.
0 matchers expected, 1 recorded.
所以我尝试了:
monitor.severe(mock(MonitorEventType.class), eq(anyString()));
但这给了
Invalid use of argument matchers.
0 matchers expected, 2 recorded.
我也试过用
monitor.severe(any(MonitorEventType.class), anyString());
但这给出了一个空指针。
有效的是
monitor.severe(mock(MonitorEventType.class), "");
但这不是我想要的。
我的测试方法是:
@Test
public void testSevere() {
monitor.severe(mock(MonitorEventType.class), eq(anyString()));
ArgumentCaptor<DefaultMonitoringEventImpl> captor = ArgumentCaptor.forClass(DefaultMonitoringEventImpl.class);
verify(event).fire(captor.capture());
DefaultMonitoringEventImpl input = captor.getValue();
assertThat(fetchMonitorLevel(input), equalTo(MonitorEventLevel.SEVERE.getDescription()));
}
private String fetchMonitorLevel(DefaultMonitoringEventImpl input) {
Map<String, String> map = input.getMonitorEventWaardes().getWaardenLijst();
return map.get(MonitorEvent.MONITOR_EVENT_LEVEL_KEY);
}
而被测方法是:
public void severe(MonitorEventType type, String message) {
write(type, MonitorEventLevel.SEVERE, message, null);
}
@Asynchronous
public void write(MonitorEventType type, MonitorEventLevel level, String message, MonitorEventWaardes pEventWaardes) {
event.fire(new DefaultMonitoringEventImpl(type, level, message, pEventWaardes));
}
我想要的是,当我使用随机 MonitorEventType 和随机字符串调用 monitor.severe 时,event.fire 调用中的“级别”参数填充了正确的值。
【问题讨论】:
-
目标到底是什么?你想测试什么?
-
显示方法
severe -
@NicolasFilotto 方法严重看起来像 public void Serious(MonitorEventType type, String message) { write(type, MonitorEventLevel.SEVERE, message, null);这里是完整的测试 public void testSevere() { monitor.severe(mock(MonitorEventType.class), eq(anyString())); ArgumentCaptor
captor = ArgumentCaptor.forClass(DefaultMonitoringEventImpl.class);验证(事件).fire(captor.capture()); DefaultMonitoringEventImpl 输入 = captor.getValue(); assertThat(fetchMonitorLevel(input), equalTo(MonitorEventLevel.SEVERE.getDescription())); } -
抱歉,您仍然没有回答我所有的问题:您到底想做什么?
write的方法是什么?MonitorEventLevel是什么班级?没有所有答案就不可能回答 -
如果你想测试一个随机字符串,那么发送一个随机字符串而不是一个空字符串。在单元测试中使用随机值的 BTY 不是一个好主意...
标签: java junit mockito matcher hamcrest