单元测试简单的方法……完善的OOP / pythonic解决方案?

我正在尝试以一种良好的面向对象的方式设计和测试类似于以下代码的代码吗?(或以Python方式?)


这是一个工厂类,它决定一个人的名字是长还是短:


class NameLengthEvaluator(object):

    def __init__(self, cutoff=10)

        self.cutoff = cutoff


    def evaluate(self, name):

        if len(self.name) > cutoff:

            return 'long'

        else:

            return 'short'

这是一个对自己的名字长度有意见的人类:


 class Person(object):

     def __init__(self, name=None, long_name_opinion=8):

         self.name = name


     def name_length_opinion(self):

         return 'My names is ' + \

                    NameLengthEvaluator(long_name_opinion).evaluate(self.name)

几个问题:

  • Person方法是否name_length_opinion()值得进行单元测试,如果可以,它将是什么样?

  • 通常,是否有一种很好的方法来测试具有完全外部功能的类的简单方法?

似乎对该方法的任何测试都只会重述其实现,并且该测试只是为了确认没有人触摸代码而存在。


大话西游666
浏览 146回答 4
4回答

RISEBY

单元测试Person方法name_length_opinion()是否值得进行单元测试,如果是的话,它将是什么样?您是否要确保它按照您的想法做,并确保将来不会损坏?如果是这样,请为此编写一个单元测试。并且该测试只是为了确认没有人触摸代码而存在单元测试更多是关于确保类符合其指定的合同。您不必为所有内容编写单元测试,但是,如果这是一种简单的方法,无论如何,它都应该是一个简单的单元测试。重复似乎对此方法进行的任何测试都只会重述其实现您不应该重复算法,而应该使用用例。例如,NameLengthEvaluator截止值为的a10应该是以下简称:乔治玛丽这些是长名称:麦克刀开膛手杰克因此,您应该验证该方法正确报告了这些名称的缩写。您还应该测试NameLengthEvaluator截断为的a4将报告Mary为短而其他报告为长。丢码?如果您曾经编写过一个类,然后编写了一个主方法,该方法只是运行该类以确保其执行了预期的工作(然后在移至另一个类时就将该主方法扔掉了),那么您已经编写了单元测试。但是不要丢掉它,而要保存并将其转换为单元测试,以便将来可以确保您没有破坏任何东西。外部代码通常,是否有一种很好的方法来测试具有完全外部功能的类的简单方法好吧,如果它完全是外部的,那么为什么要在该类上使用它呢?通常,您至少有一些可以测试的逻辑。在这种情况下,您可以测试name_length_opinion返回的结果My names is long或My names is short正确的情况。

偶然的你

这实际上取决于该代码的生命周期。显然,在当前状态下,该方法显然是正确的,并且单元测试更多地是关于其行为方式的规范。如果您打算在将来进行更改(NameLengthEvaluator例如,以某种方式重新实现),那么进行单元测试就很好了,因为运行测试会捕获任何回归。但是在这种情况下,您似乎不太可能进行任何更改,因此测试可能过度(尽管进行了健全的检查)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python