我对Mockito相当新鲜。我不确定如何测试void函数emitcount()或实际测试类为100%?
@AllArgsConstructor(onConstructor = @__(@Inject))
public class MetricsFactoryProvider {
private MetricsFactory metricsHelper;
public void emitCount(final String metricName, final double metricCount, final long startTime) {
if (StringUtils.isBlank(metricName)) {
return;
}
try {
Metrics metrics = metricsHelper.newMetrics();
metrics.addDate("StartTime", startTime);
metrics.addCount(metricName, metricCount, Unit.ONE);
metrics.close();
} catch (Throwable t) {
throw some exception();
}
}
这是我到目前为止的代码
public class MetricsFactoryProviderTest {
@Mock
Metrics metrics;
@Mock
MetricsFactory metricsHelper;
public void testemitCountfromMetricsFactoryProvider() {
metricsHelper = new MetricsHelper();
Metrics metrics = metricsHelper.newMetrics();
metrics.addDate("StartTime", System.currentTimeMillis());
metrics.addCount("some", 1, Unit.ONE);
MetricsFactoryProvider metricsFactoryProvider = new MetricsFactoryProvider(metrics.getMetricsFactory());
metricsFactoryProvider.emitCount("some metric name",1,System.currentTimeMillis());
Assert.assertNotNull(metricsFactoryProvider);
}
如何测试发射功能?我的思考过程
答案 0 :(得分:2)
这里:
@Mock
Metrics metrics;
与
一起Metrics metrics = new MetricsHelper().newMetrics();
根本没有任何感觉。您的测试类定义了一个模拟的Metrics对象 - 但随后创建了另一个真实的度量对象,然后将这些对象传递给您正在测试的类。
这很简单:当您使用真实对象验证预期行为时 - 然后执行此操作。否则,你使用模拟。
然后你可以做像
这样的事情MetricsFactoryProvider underTest = new MetricsFactoryProvider(mockedHelper);
underTest.emit(...);
verify(mockedHelper).add(eq("Start Date"), any());
仅举例。从这个意义上说:不要试图通过反复试验来学习嘲弄。这太复杂了。相反:阅读并遵循一个好的教程,如one。
但是只是在这里给出一个简短的提示:使用模拟有两个不同的情况。
Whatever mockedFoo = mock(Whatever.class);
when(mockedFoo.bar()).thenReturn("something else");
UnderTest underTest = new UnderTest(mockedFoo);
assertThat(underTest.foo(), is("something else"));
以上使用"模拟规范"以便被测试的班级可以做其工作。您需要控制模拟以在测试中执行某些操作。将其与:
进行比较Whatever mockedFoo = mock(Whatever.class);
UnderTest underTest = new UnderTest(mockedFoo);
assertThat(underTest.foo(), is("something else"));
verify(mockedFoo).bar("expected"parm");
在这种情况下,您希望检查发生某个预期的呼叫。