我多次阅读,应该使用mock
来模仿外部呼叫,并且不应该对任何外部服务进行调用,因为无论外部服务如何,都需要运行测试。
这完全有道理......但是
外部服务如何变化?测试有什么用,测试我的代码是否应该如果因为外部服务被修改/更新/删除/弃用等而永远不知道它何时中断...
我该如何调和?伪代码在
之下function post_tweet:
data = {"tweet":"tweetcontent"}
send request to twitter
receive response
return response
如果我嘲笑这一点,我将无法通知twitter更改了他们的API,现在我必须更新我的测试......
答案 0 :(得分:3)
有不同级别的测试。
单元测试正在测试,正如您可能从名称中猜测的那样一个单元。例如,函数或方法,也许是类。如果你将它解释得更宽,它可能包含一个用Djangos测试客户端测试的视图。 Unittests从不测试外部资源,如库,依赖项或其他系统的接口。这些事情将被嘲笑。
集成测试正在测试您的接口和外部库,系统和API的使用是否正确实施。如果依赖关系发生变化,您将注意到必须更改代码和单元测试。
还有其他级别的测试,例如行为测试,UI测试,可用性测试。您应该确保在项目中分离这些测试类。