单元测试:测试父对象方法是否有意义?

Pic*_*els 2 python django tdd unit-testing

假设我使用的是一个名为Animal的类框架.

class Animal(object):
    def speak(self):
        logging.info(self.sound)
Run Code Online (Sandbox Code Playgroud)

我必须子类化这个对象才能使用它,它可能看起来像这样:

class Dog(Animal):
    def __init__(self):
        self.sound = 'Woof Woof'
Run Code Online (Sandbox Code Playgroud)

我看到它的方式我可以做两件事.第一个是这样的:

dog = Dog()
assert dog.sound == 'Woof Woof'
Run Code Online (Sandbox Code Playgroud)

第二个选项是模拟logging.info并检查它是否被调用.我对他们两人都有不同的看法.

第一个感觉就像我只是测试我的配置而第二个感觉就像我实际上没有测试我想要的对象.

我正在使用这个简单的例子,因为那些不使用Django的人可能会给我一些指示.我遇到的真正问题涉及Django通用视图.

例如,我可以拥有此模板视图:

class HomeView(TemplateView):
    template_name = 'home.html'
Run Code Online (Sandbox Code Playgroud)

我是否只测试template_name是否具有正确的值,还是使用测试客户端进行更高级别的测试来测试完整视图?

Jér*_*nge 5

不,确保正确测试父对象(必要时使用模拟)并分别测试子对象方法.这符合封装概念(使问题成为本地).

如果不这样做,那么包含许多类的大型项目将耗尽您的所有编码资源,而无需增值.