Python模拟和单位测试最佳实践



我对Python World非常陌生,并学习了自己的方式。我有Java和C#背景,在Java/C#单元测试方法中非常清楚。我们有一个正在测试的课程,我们将所有模拟的依赖性注入了测试代码的期望。

喜欢:

带服务加油的汽车课测试用例:汽车显示出低燃料指示,我们可以编写测试。

    FuelLevelService fsMock = mock(FuelLevelService .class);
    when(fsMock.getLevel()).thenReturn(LOW);
    Car car = Car(fsMock)
    car.start()
    assertTrue(car.warningIndicator());
    assertTrue(car.warning().contains("Fuel level low Warning"));

在Python中,我已经阅读了我们可以使用猴子修补程序来设置因子,我们可以测试。

    @mock.patch('models.fuel_service.getLevel')
    def test_main(self, fuel_service):
        fuel_service.return_value = 'LOW'
        Car car = Car(fuel_service)
        car.start()
        self.assertEqual(car.warningIndicator(), True)

我要使用这种方法。但是我的同事们拒绝了这个想法,并提议实例化实际对象(加油站服务)并设定其价值。我发现它非常繁琐,不需要,因为在模拟中我们也只能通过我们的期望来做同样的事情。

我目前正在努力理解我是错的还是我的同事方法被认为是更好的模式。

*上面我给出了一个简单的例子。在我们创建实例对象并设置其值的项目中,代码为10-25行[不要问我为什么,但这就是如何创建此对象并设置一个值,以便它返回相同的值外观给我额外的维护。对于创建依赖对象的方法,我们将在模块中拥有许多PY文件。

另一点是我们在这里仅测试测试类(不是依赖性服务类),正在测试的类,该类将对依赖项服务的返回值做出反应。我们可以进行负面测试和阳性测试以涵盖正在测试的类别。

对于依赖项服务类别,它应该具有自己的测试来验证其所有方案可分离性。因此,它将在那里进行测试。通过这样做,我们将有明确的分离,并且在存在错误的情况下测试将失败。

,如果创建真实对象是不便/笨拙的,您只需要使用模拟(请参阅此处)。

,如果您在问题中提到的那样,您可以便宜地创建真实的实例,并轻松设置其价值,没有真正的模拟。

此外,您不能保证模拟的行为像真实的实现一样,因此您的测试可能会进行测试……但不一定是您的代码在生产中的真正行为。使用生产类是最好的。

最新更新