需要明确的是,我不是在问如何或是否应该测试私有方法。
设置。
场景
我想象一些像 publish() 这样的公共方法具有状态转换,然后我想断言私有状态属性是它应该是的特定状态。
考虑的选项
实现此目的的一种方法是为所有属性提供公共 getter,在测试中使用这些 getter,以及帮助促进映射而不是使用反射,但随后我需要所有这些不必要的公共 getter。
第二个选项是下游测试。我更新聚合,保留它,并检查该值是否保留在数据存储中或通过检索某些视图模型来检查。但我无法单独测试总体。
目前的结论
所以现阶段我有一个
还有我没有想到的更好的解决方案吗?
观察者.
这是否比其他选择“更好”是一个权衡的问题。
观察者可以通过多种不同的方式来证明其合理性。 也许是“日志记录”,也许是“遥测”,也许是订阅“领域事件”……但我们感兴趣的核心交互是:在测试可以控制的某些情况下,“聚合”发送我们想要的信息是我们的测试可以询问的其他对象。
这是否比您的其他替代方案“更好”取决于您的背景:您试图通过“测试”实现哪些特定好处,以及您如何评估不同的权衡。
(例如,如果您是负责创建自动不一致检测器以在每次重构后运行的开发人员,那么您可能对与试图确保交付产品不会出现问题的测试人员感兴趣的属性不同的属性感兴趣。这不可避免地会导致诉讼和首席执行官被监禁。)