我尝试为此简单功能编写单元测试。基本上,它从Slack接收有效负载,然后生成一条消息,然后使用API将其发送给用户。
def directoryEmpty(String dir) {
!new File(dir).list().any()
}
我写了这个测试,但是对于这样一个简单的函数来说,它看起来太复杂了。如何使测试更简单?
@slack_messages.on_pattern('(?i)^help$')
def handle_help_message(event, body, match):
message = build_help_message()
Slack(event['team_id']).send_message(body['user'], **message)
def build_help_message():
text = "Hello"
return {
'text': text,
'attachments': [
build_basics(),
build_controls()
]
}
答案 0 :(得分:1)
单元测试用于发现那些可以在隔离代码中检测到的错误。但是,您的示例代码主要是与Slack
组件进行交互。也就是说,如果这段代码中存在错误,则它们将与您如何调用Slack
构造函数和send_message
方法有关。
但是,您不会在Slack类的模拟中找到这些错误:想象send_message
方法的正确命名参数不是text
和attachments
,而是{{1 }}和txt
-对于您的模拟,您将永远不会注意到此问题,因为您的模拟反映了您对其他组件如何工作的误解。
结论是,对于这种代码,单元测试不是正确的方法,而集成测试则是正确的方法。如果您需要更多示例,也可以看看这些问题,它们的方向相似:Mock a series of interdependent calls或Should Unit Tests test against the REST API?。