假设我的SUT是一个BubbleMachine,它会创建一些内部使用的Bubble对象实例。但是,我希望它能用我的MockBubble代替..我该怎么办?
解决方案:
使用我可以传递给BubbleMachine的中间类BubbleFactory。这样我就可以给它一个MockBubbleFactory。
当我使用允许它的lang时,在BubbleMachine上设置一些字符串,告诉它为哪个类实例化它的Bubble对象。例如。 $ bubbleMachine-> setBubbleClass('路径/到/ MockBubble.class&#39)
在BubbleMachine上有一个setBubbleObject(..)类型的函数,我传递了我的MockBubble。然后,BubbleMachine只是在每次想要泡泡时回收该对象实例。
其中任何一个都适用于我当前的问题,但我怀疑他们可能会让一些单元测试专业人员感到有些不舒服。
由于
答案 0 :(得分:0)
理想情况下,如果您真的觉得需要模拟SUT创建的对象,那么请使用为您执行此操作的模拟工具。我认为这是最干净的解决方案,因为它不需要SUT中的任何额外复杂性(例如工厂,设置器等)。