使用数据访问层和应用层时的 TDD 方法
TDD approach when using a data access layer and an application layer
我是 TDD 新手。我想要一些关于如何对由实现实际数据库访问语句的数据层和其工作仅限于调用数据层方法的应用程序层形成的应用程序进行单元测试的提示。例如:
在我的数据层 class 中,称为 CassandraDataLayer,我有一个 retrieveMessage 方法:
class CassandraDataLayer:
def retrieveMessage(self,message_id):
#database access statements to retrieve the message
#returns a Message class instance
另一方面,在我的应用层 class 中,称为 ApplicationLayer,我有以下 retrieveMessage 方法:
class ApplicationLayer:
def retrieveMessage(self,message_id):
return self.dataLayer.retrieveMessage(message_id)
我是否必须对这两种方法都进行单元测试?
为了测试我的 CassandraDataLayer retrieveMessage 方法,我进行了以下操作:
- 我实例化了一个测试数据库。
- 我手动往里面插入一条消息
- 然后,我调用 retrieveMessage 来尝试检索消息
- 最后,断言插入的消息和检索的消息相等。
但是,那么,我该如何测试应用层 class retrieveMessage 方法呢?我必须再次使用相同的逻辑吗?是不是很多余?
根据要求,为清楚起见,我将我的两条评论移至此答案。
您的测试看起来多余的原因是目前您的代码相当多余。因为应用程序层的行为仅针对 return 通过数据层 return 发送给它的内容,所以您的第二个测试现在唯一要确认的是解释器是否处理 return正确调用(理想情况下,它是您的代码的不变量 :)。
随着您继续向应用层添加功能,TDD 要求您也修改此测试或添加其他测试来测试该功能,因此您对数据层和应用层的测试看起来不会像两个 UUT 那样冗余去一样。
我是 TDD 新手。我想要一些关于如何对由实现实际数据库访问语句的数据层和其工作仅限于调用数据层方法的应用程序层形成的应用程序进行单元测试的提示。例如:
在我的数据层 class 中,称为 CassandraDataLayer,我有一个 retrieveMessage 方法:
class CassandraDataLayer:
def retrieveMessage(self,message_id):
#database access statements to retrieve the message
#returns a Message class instance
另一方面,在我的应用层 class 中,称为 ApplicationLayer,我有以下 retrieveMessage 方法:
class ApplicationLayer:
def retrieveMessage(self,message_id):
return self.dataLayer.retrieveMessage(message_id)
我是否必须对这两种方法都进行单元测试?
为了测试我的 CassandraDataLayer retrieveMessage 方法,我进行了以下操作:
- 我实例化了一个测试数据库。
- 我手动往里面插入一条消息
- 然后,我调用 retrieveMessage 来尝试检索消息
- 最后,断言插入的消息和检索的消息相等。
但是,那么,我该如何测试应用层 class retrieveMessage 方法呢?我必须再次使用相同的逻辑吗?是不是很多余?
根据要求,为清楚起见,我将我的两条评论移至此答案。
您的测试看起来多余的原因是目前您的代码相当多余。因为应用程序层的行为仅针对 return 通过数据层 return 发送给它的内容,所以您的第二个测试现在唯一要确认的是解释器是否处理 return正确调用(理想情况下,它是您的代码的不变量 :)。
随着您继续向应用层添加功能,TDD 要求您也修改此测试或添加其他测试来测试该功能,因此您对数据层和应用层的测试看起来不会像两个 UUT 那样冗余去一样。