【发布时间】:2015-08-18 06:56:44
【问题描述】:
我是 TDD 新手。我想要一些关于如何对由实现实际数据库访问语句的数据层和其工作仅限于调用数据层方法的应用程序层形成的应用程序进行单元测试的提示。例如:
在我的名为 CassandraDataLayer 的数据层类中,我有一个 retrieveMessage 方法:
class CassandraDataLayer:
def retrieveMessage(self,message_id):
#database access statements to retrieve the message
#returns a Message class instance
另一方面,在我的应用层类 ApplicationLayer 中,我有以下 retrieveMessage 方法:
class ApplicationLayer:
def retrieveMessage(self,message_id):
return self.dataLayer.retrieveMessage(message_id)
我必须对这两种方法都进行单元测试吗?
为了测试我的 CassandraDataLayer retrieveMessage 方法,我进行了以下操作:
- 我实例化了一个测试数据库。
- 我手动将消息插入其中
- 然后,我调用retrieveMessage 来尝试检索消息
- 最后,断言插入的消息和检索的消息相等。
那么,我该如何测试应用层类的retrieveMessage方法呢?我必须再次使用相同的逻辑吗?这不是多余的吗?
【问题讨论】:
-
您的测试看起来多余的原因似乎是您的代码是多余的。这可能是由于示例的局限性,但您的应用程序层代码所做的只是返回数据层代码返回给它的内容。因此,您要测试的只是您的编译器/解释器是否正确处理返回语句。也许你需要一个更复杂的例子?编辑:对不起,我错过了 Python 标签。口译员是正确的词。
-
实际上,这是我的应用程序的第一次迭代。现在,我希望它在控制台上返回结果。所以,在我的数据层和我的应用层之间存在这种冗余并不罕见,还没有任何打印或链接逻辑。所以这是我在我的应用程序中实际拥有的,我只是对这种情况感到困惑。当应用层如此冗余时,我是否必须放弃单元测试?
-
这是完全可以接受的。我的观点是,由于您的应用程序非常新,并且数据层和应用程序层之间的差异很小,因此很明显测试是多余的。当您添加区分两者的代码时,这两个测试肯定会减少冗余。
-
好的,谢谢你的回答。
-
也许你应该把你的答案写成问题的“anwser”而不是评论,这样我就可以解决我的问题
标签: python database unit-testing testing tdd