要测试您的程序,您有 2 个选项:
仅检查消息的相关部分(您实际希望通过此测试检查的内容)。Aruba 为其内置了 stepdef,因此非常简单
检查完整消息。如果消息很短,您可以使用 Aruba 的内置 stepdef。但是,如果消息很长,您可能希望将其放在单独的文件中。由于 Aruba 不包含此类方法,因此您应该自己编写此 stepdef。
它可能看起来像:
# Require aruba/api before that
Then /^it should (pass|fail) with message from file "(.*)"$/ do |pass_fail, filename|
exact_output = File.read(filename)
Aruba::API::assert_exit_status_and_output(pass_fail == "pass", exact_output, true)
end
如果你想写很多测试并且很多消息是相似的,你最终可能会得到很多WET消息。如果发生更改,断言完整消息将使支持测试变得更加困难。
因此,您可能希望使用某种模板引擎来断言这些消息以进行 DRYer 测试。
您可以以不同的方式设计测试。
如果您只使用第一种方法,那么您的测试可能不会发现一些回归错误,因为它们不会测试所有内容。如果您将使用第二种方法,如果消息之间有很多重复,那么支持它们可能会更加困难。
因此,这两个选项之间需要权衡取舍。通常您使用方法 1 构建一些测试,使用方法 2 构建另一个测试。您应该考虑在您的情况下什么会更好。我不知道任何黄金法则。