在调用覆盖方法的类中测试方法

时间:2019-07-01 18:57:08

标签: python unit-testing inheritance

假设我有以下课程:

class A():
    def method1(self, x):
       x = x * 2
       x = self.method2(x)
       return x

    def method2(self, x):
       raise NotImplementedError
class B(A):
    def method2(self, x):
        return x + 5

如果我正在为A类编写单元测试, (对单元测试来说是个新手)

  1. 如何测试method1
    由于它调用的方法在子类中被覆盖。

  2. 我是否创建类A或类B的对象?(我正在测试A
    为A创建对象将导致NotImplementedError。可能的解决方案是使用B的对象测试此方法,或者可能在编写类B的测试时测试此方法。

修改: 尽管我还没有完全固定在设计上,但是类A很有可能不会直接实例化。

1 个答案:

答案 0 :(得分:4)

我不会依赖B的实例-您可能也想对B进行单元测试,但是如果您要测试A,则不应依赖在其他班级的逻辑上。

您可以测试调用method1会引发NotImplementedError,但这很脆弱-如果method1直接引发该错误,而无论method2,该测试也会通过。

更好的方法可能是创建一个覆盖method2并仅按原样返回x的伪类,并将其用于测试A