首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确保有效的测试覆盖

如何确保有效的测试覆盖
EN

Stack Overflow用户
提问于 2016-07-01 14:08:45
回答 1查看 2.5K关注 0票数 0
代码语言:javascript
复制
public interface MessageProducer {
    public void produce(String message);
    public Map<String, Set<String>> getMessagesMapped();
} 

public MessageProducerImpl {
   @Override
   public void produce(String message) {
       //code logic here calls private class methods to manipulate messages
   }

@Override
public Map<String, Set<String>> getMessagesMapped() {
    return map;
}
}

在以下情况下,一个测试应该如何驱动上述场景并确保良好的测试覆盖率:

  • 入口点produce()不符合接口定义的契约,并且没有返回类型。
  • 其他方法是private类中的MessageProducerImpl
  • 不允许更改接口
EN

回答 1

Stack Overflow用户

发布于 2016-07-01 14:17:01

您不测试接口,而是测试实现。该接口可能过于通用,无法测试。

即使这是一种无效的方法,它也应该有所作为。写入文件,更新缓存,任何内容。由于这是一个无效的方法,它应该有一个副作用。(如果不是,它可以被移除,对吗?)

因此,测试结果,因为显然,副作用是合同的一部分(因此,应该测试)。

在示例代码中,您有一个有状态对象(通常不推荐,除非它是一个普通值对象/ DTO),所以您只能作为一个整体测试它,因为它依赖于状态。(例如,假设它有一个影响produce()方法逻辑的额外方法)

因此,测试至少包括两种方法。

对于示例代码,一个示例测试:

代码语言:javascript
复制
@Test public void myTest() {
    MessageProducerImpl underTest = new MessageProducerImpl();
    String sampleInputString = ....; // a sample string, from which the expected result is that it's split in 4 keys
    underTest.produce(sampleInputString);
    Map<String, Set<String>> result = underTest.getMessagesMapped();
    assertEquals(4, result.size());
}

然后,您的代码覆盖率工具应该将其标记为绿色。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38147560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档