我正在编写一个简单的库来检查 mysql 服务器是否存在并依赖于结果,它还做其他事情。为了检查连接,我使用了这样的代码:
def check_connection
result = if @password
`mysqladmin -u#{@username} -p#{@password} ping`
else
`mysqladmin -u#{@username} ping`
end
parse_result(result)
end
如何测试这个方法?我想,我不应该在测试期间连接到 mysql 服务器。我唯一的想法是在一种方法中返回用于 ping 的适当字符串命令(取决于密码的使用)并在如下方法中使用它:
def check_connection(ping_string)
`#{ping_string}`
end
并且在每个测试中只模拟这个方法,因此只有这个方法使用命令。
您会如何正确测试它?
最佳答案
您可以坚持使用原始代码,并像这样处理它:
- 确保
parse_result
已经过单元测试。 - 模拟
check_connection
,以便您的其余测试不会最终触发对mysqladmin
的调用。
与 mysql 本身的连接没有经过测试,这是一个漏洞,但我认为这没什么大不了的。测试 ping_string
不会真正堵住那个洞,并且鉴于对 mysqladmin
的调用基本上是硬编码的,所以这里的风险很小。
关于ruby-on-rails - 如何测试使用系统命令的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5326981/