Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用数据访问层和应用层时的TDD方法_Python_Database_Unit Testing_Testing_Tdd - Fatal编程技术网

Python 使用数据访问层和应用层时的TDD方法

Python 使用数据访问层和应用层时的TDD方法,python,database,unit-testing,testing,tdd,Python,Database,Unit Testing,Testing,Tdd,我是TDD的新手。我想要一些关于如何对一个应用程序进行单元测试的技巧,该应用程序由一个实现实际数据库访问语句的数据层和一个仅限于调用数据层方法的应用程序层组成。例如: 在我的数据层类CassandraDataLayer中,我有一个retrieveMessage方法: class CassandraDataLayer: def retrieveMessage(self,message_id): #database access statements to retrieve

我是TDD的新手。我想要一些关于如何对一个应用程序进行单元测试的技巧,该应用程序由一个实现实际数据库访问语句的数据层和一个仅限于调用数据层方法的应用程序层组成。例如:

在我的数据层类CassandraDataLayer中,我有一个retrieveMessage方法:

class CassandraDataLayer:

    def retrieveMessage(self,message_id):
        #database access statements to retrieve the message
        #returns a Message class instance
class ApplicationLayer:

    def retrieveMessage(self,message_id):
        return self.dataLayer.retrieveMessage(message_id)
另一方面,在名为ApplicationLayer的应用程序层类中,我有以下retrieveMessage方法:

class CassandraDataLayer:

    def retrieveMessage(self,message_id):
        #database access statements to retrieve the message
        #returns a Message class instance
class ApplicationLayer:

    def retrieveMessage(self,message_id):
        return self.dataLayer.retrieveMessage(message_id)
我是否必须对这两种方法都进行单元测试

为了测试我的CassandraDataLayer retrieveMessage方法,我进行了如下操作:

  • 我实例化了一个测试数据库
  • 我手动将消息插入其中
  • 然后,我调用retrieveMessage尝试检索消息
  • 最后,断言插入的消息和检索到的消息相等

  • 但是,那么,如何测试应用层类retrieveMessage方法呢?我必须再次使用相同的逻辑吗?是不是有点多余?

    根据要求,为了清晰起见,我将我的两条评论移到这个答案上

    您的测试看起来冗余的原因是,目前,您的代码是相当冗余的。因为应用程序层的行为只是返回通过数据层返回给它的内容,所以您的第二个测试现在唯一要确认的是解释器是否正确地处理返回调用(理想情况下,它是代码的一个不变量:)


    当您继续向应用程序层添加功能时,TDD要求您也修改此测试或添加其他测试来测试该功能,因此,当两个UUT相同时,您对数据层和应用程序层的测试将看起来不那么冗余

    根据要求,为了清晰起见,我将我的两条评论移到这个答案上

    您的测试看起来冗余的原因是,目前,您的代码是相当冗余的。因为应用程序层的行为只是返回通过数据层返回给它的内容,所以您的第二个测试现在唯一要确认的是解释器是否正确地处理返回调用(理想情况下,它是代码的一个不变量:)


    当您继续向应用程序层添加功能时,TDD要求您也修改此测试或添加其他测试来测试该功能,因此,当两个UUT相同时,您对数据层和应用程序层的测试将看起来不那么冗余

    您的测试看起来冗余的原因似乎是您的代码是冗余的。这可能是由于示例的局限性,但应用程序层代码所做的只是返回数据层代码返回给它的内容。因此,您要测试的只是编译器/解释器是否正确处理返回语句。也许你需要一个更复杂的例子?编辑:对不起,我错过了Python标记。解释器是正确的词。实际上,它是我的应用程序的第一次迭代。现在,我希望它在控制台上返回结果。因此,在我的数据层和应用层之间存在这种冗余并不罕见,目前还没有任何打印或链接逻辑。这就是我在应用程序中实际拥有的,我只是被这些案例弄糊涂了。当应用层如此冗余时,我是否必须放弃它的单元测试?这是完全可以接受的。我的观点是,由于您的应用程序非常新,而且数据层和应用层之间几乎没有区别,因此测试显然是多余的。当您添加区分这两个测试的代码时,这两个测试的冗余度肯定会降低。好的,谢谢您的回答。也许您应该将您的回答作为问题的“答案”而不是注释,这样我就可以解决问题。您的测试之所以显得冗余,似乎是因为您的代码是冗余的。这可能是由于示例的局限性,但应用程序层代码所做的只是返回数据层代码返回给它的内容。因此,您要测试的只是编译器/解释器是否正确处理返回语句。也许你需要一个更复杂的例子?编辑:对不起,我错过了Python标记。解释器是正确的词。实际上,它是我的应用程序的第一次迭代。现在,我希望它在控制台上返回结果。因此,在我的数据层和应用层之间存在这种冗余并不罕见,目前还没有任何打印或链接逻辑。这就是我在应用程序中实际拥有的,我只是被这些案例弄糊涂了。当应用层如此冗余时,我是否必须放弃它的单元测试?这是完全可以接受的。我的观点是,由于您的应用程序非常新,而且数据层和应用层之间几乎没有区别,因此测试显然是多余的。当您添加区分这两个测试的代码时,这两个测试的冗余度肯定会降低。好的,谢谢您的回答。也许您应该将答案作为问题的“答案”而不是注释,这样我就可以解决我的问题了