java非嵌入式集成测试
我正在为消息传递系统编写集成测试。大多数测试在流的不同阶段端到端地收集消息及其各种代码路径的计数。我目前所做的测试已经变得过于侵入性,因为我在这些消息传递组件中有许多public static AtomicInteger
,我在处理消息时会增加它们,然后测试会根据这些计数进行断言
更糟糕的是,在部署到prod时,我必须删除这些计数器——这很容易添加bug
我如何设计我的测试,使我获得通过这些组件的消息的计数,而不需要在我的类中填充计数器?我在考虑对真实组件进行子分类,覆盖方法,移动子类方法中的计数器——并在测试中使用这些子类——还有其他关于更好设计的想法吗
# 1 楼答案
不久前,我不得不处理类似的情况。我让几个组件处理一些消息,然后将它们传递给其他组件。我想出了这个设计:
notify
方法,用于通知并将接收到的消息传递给其他组件# 2 楼答案
用只在测试中使用的静态
AtomicInteger
分散代码肯定是个坏主意。以下是我推荐的几种方法:使用jmx或中间件中可用的其他监视机制以非侵入性方式读取消息计数
增加在所有组件中安装侦听器的可能性。在生产环境中使用
null
或空对象模式,而在测试中安装一些简单的侦听器来计算调用/消息di将帮助您使用aop或类似于上述的其他仪器技术
测试副作用和输出!不要对流中的确切消息进行假设,只需查看整体结果是否正确即可。这样,您的测试更加灵活,并将重点放在正在测试的内容上。不幸的是,如果出现故障,调试将花费更多的时间