java - 非侵入式集成测试

标签 java integration-testing

我正在为消息传递系统编写集成测试。大多数测试在流程的各个阶段收集消息及其各种端到端代码路径的计数。我目前进行的测试变得过于侵入,因为我在这些消息传递组件中有许多 public static AtomicInteger - 我在处理消息时递增它们 - 然后测试断言这些计数。

更糟糕的是,在部署到产品时我将不得不删除这些计数器——这很容易增加错误。

我如何设计我的测试,以便我获得通过这些组件的消息计数,而不需要在我的所有类中实际填充计数器?我正在考虑对真实组件进行子类化并覆盖方法,并在子类方法中移动计数器 - 并在我的测试中使用这些子类 - 关于更好的设计还有其他想法吗?

最佳答案

用仅在测试中使用的静态 AtomicInteger 分散您的代码当然不是一个好主意。以下是我推荐的几种方法:

  • 使用 或中间件中可用的其他监控机制以非侵入方式读取消息计数

  • 增加在所有组件中安装监听器的可能性。在生产环境中使用 null 或空对象模式,而在测试中安装一些简单的监听器来计算调用/消息。 会帮助你的。

  • 使用 或其他仪器技术,与上述类似。

  • 测试副作用和输出!不要对流中的确切消息做出假设,只看整体结果是否正确。这样您的测试就更加灵活,并且专注于正在测试的内容。不幸的是,当出现问题时,调试将花费更多时间。

关于java - 非侵入式集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11366836/

相关文章:

ruby-on-rails - 如何用 akephalos 配置牛排

java - org.apache.cxf.ws.policy.PolicyException : None of the policy alternatives can be satisfied

c# - ArcGIS Development.Java 与 .Net(C#)

java - 浏览器无法连接 spring4 websocket 服务器

java - 如何根据第一个元素合并多个数组列表?

database - 何时模拟数据库访问

c# - 使用 MSTest 仅运行所有测试集的一部分

grails - 如何在 IntelliJ IDEA 中进行 Grails 3 集成测试

java - 对话框中的星级不会更改已保存的值

java - AHK 使用 getElementByID 查找/选择元素