gpt4 book ai didi

java - 如何使用 void 方法确保良好的测试覆盖率

转载 作者:行者123 更新时间:2023-12-01 09:44:52 25 4
gpt4 key购买 nike

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()不遵守接口(interface)定义的契约,并且没有返回类型。
  • 其他方法有privateMessageProducerImpl
  • 不允许更改界面

最佳答案

您不测试接口(interface),而是测试实现。该接口(interface)可能太通用而无法测试。

尽管它是一个 void 方法,但它应该做一些事情。写入文件、更新缓存等等。既然它是一个void方法,它应该有副作用。(如果不是,可以删除,对吧?)

因此,测试结果,因为显然,副作用是契约(Contract)的一部分(因此应该进行测试)。

在您的示例代码中,您有一个有状态对象(通常不推荐,除非它是纯值对象/DTO),因此您只能将其作为一个整体进行测试,因为它是依赖于状态的。 (例如,考虑它有一个影响 product() 方法逻辑的额外方法)

所以测试至少包括这两种方法
对于您的示例代码,示例测试:

@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());
}

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

关于java - 如何使用 void 方法确保良好的测试覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38147560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com