我对Mockito来说是新手。我不确定如何测试void函数发射()或实际测试类别为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);
}
如何测试发射功能?我的思考过程
- donothing(当(MetricsFactoryProvider.emitFunction(Pass args))) )
- 还是我必须使用参数captor()?我如何验证该函数发射功能是否被调用并且MetricsFactoryProvider对象具有正确的数据?
此处:
@Mock
Metrics metrics;
与
一起Metrics metrics = new MetricsHelper().newMetrics();
根本不会使任何有意义。您的测试类定义了模拟的指标对象 - 但然后创建另一个真实的指标对象,然后将其传递到正在测试的类中。
这很简单:当您可以使用a real 对象的预期行为时 - 然后执行此操作。否则,您使用模拟。
然后您可以做
之类的事情MetricsFactoryProvider underTest = new MetricsFactoryProvider(mockedHelper);
underTest.emit(...);
verify(mockedHelper).add(eq("Start Date"), any());
例如。从这个意义上讲:不要试图通过反复试图学习嘲笑。这太复杂了。相反:阅读并遵循像这样的好教程。
,但在这里提供一个简短的提示:有两个使用模拟的情况不同的情况。
Whatever mockedFoo = mock(Whatever.class);
when(mockedFoo.bar()).thenReturn("something else");
UnderTest underTest = new UnderTest(mockedFoo);
assertThat(underTest.foo(), is("something else"));
上面使用"模拟规范",以便正在测试的类可以 do 其作业。您需要控制模拟以在测试中执行一些操作。将其比较到:
Whatever mockedFoo = mock(Whatever.class);
UnderTest underTest = new UnderTest(mockedFoo);
assertThat(underTest.foo(), is("something else"));
verify(mockedFoo).bar("expected"parm");
在这种情况下,您想要检查发生某个预期的电话。