班级中的Mockito单元测试空隙函数



我对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);
}

如何测试发射功能?我的思考过程

  1. donothing(当(MetricsFactoryProvider.emitFunction(Pass args)))
  2. 还是我必须使用参数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");

在这种情况下,您想要检查发生某个预期的电话。

相关内容

  • 没有找到相关文章

最新更新