Unit testing 如何模拟SUT创建的对象

Unit testing 如何模拟SUT创建的对象,unit-testing,mocking,Unit Testing,Mocking,假设我的SUT是一台BubbleMachine,它自己创建一些Bubble对象的实例供内部使用。但是,我希望它使用我的MockBubble来代替。。我该怎么办 解决方案: 使用我可以传递给BubbleMachine的中间类BubbleFactory。这样我就可以给它一个模拟泡泡工厂 当我使用允许它的lang时,在BubbleMachine上设置一些字符串,告诉它为它的Bubble对象实例化哪个类。例如,$bubbleMachine->setBubbleClass('path/to/MockBub

假设我的SUT是一台BubbleMachine,它自己创建一些Bubble对象的实例供内部使用。但是,我希望它使用我的MockBubble来代替。。我该怎么办

解决方案:

  • 使用我可以传递给BubbleMachine的中间类BubbleFactory。这样我就可以给它一个模拟泡泡工厂

  • 当我使用允许它的lang时,在BubbleMachine上设置一些字符串,告诉它为它的Bubble对象实例化哪个类。例如,$bubbleMachine->setBubbleClass('path/to/MockBubble.class'))

  • 在BubbleMachine上有一个setBubbleObject(…)类函数,我将我的MockBubble传递给它。然后,BubbleMachine每次想要创建一个bubble时都会循环使用该对象实例

  • 这三种方法中的任何一种都可以解决我目前的问题,但我怀疑它们可能会让一些单元测试专业人员感到有点不舒服


    感谢

    理想情况下,如果您真的觉得需要模拟SUT创建的对象,那么请使用模拟工具来模拟。我认为这是最干净的解决方案,因为它不需要SUT中的任何额外复杂性(例如工厂、设置器等)