如何在Ruby代码中测试看似“不可测试”的内容?

时间:2013-07-28 22:56:51

标签: ruby unit-testing rspec2

我正在编写一个gem来包装xmpp4r RubyGem。我想为我所能提供的所有内容添加测试,但我不熟悉测试,而且有点困在这里。

基本上,我希望我的一个类具有“连接”功能,但我不知道如何测试这样的东西......我在网上找到的关于测试的所有例子都过于简化了。它“是绿色西兰花”等,你明白了。

你如何测试看似更复杂的东西?关于这些东西的良好文档的链接将是很好的,以及来自您自己的经验的更个性化的答案。

编辑:如果没有遇到任何例外情况,可能会让测试通过?这样做我会走上正确的道路吗?

2 个答案:

答案 0 :(得分:2)

只要记住你作为一个程序员,你就是你自己的代码世界的主人。

与构建易于使用的应用程序的方式相同,您可以帮助自己并使代码易于测试。进行OO编程的一个主要好处是它将行为封装到方法中,然后使用这些方法作为关键测试点更容易测试代码。如果您的代码很难测试,那么您不会将自己或测试人员视为您的应用程序/代码的另一个用户。

测试与任何框架或技术都没有直接关系。 尝试将其视为与代码本身分离的东西,比这更大的东西。 如果您不知道如何测试某些东西是因为您很可能不知道为什么需要它以及它将如何使用。

尝试做一些TDD(测试驱动开发),你会明白我的观点。

另请注意,有不同类型的测试: 功能测试/高级 单元测试/低水平 UAT /用户验收测试 性能测试 探索性测试/手动测试 集成测试(您可以构建一些代码片段的模型,以便在集成之前预测任何问题)

测试成本很高,因此测试所有测试需要测试的内容都不是问题所在。

即使是NASA也不会测试“一切”

测试是......深度编程。 好好潜水!

http://en.wikipedia.org/wiki/Software_testability

答案 1 :(得分:2)

首先,检查宝石本身是否经过测试。如果是,测试正在通过,你可能应该相信gem的代码。然后,您可以模拟对gem的任何调用,并在测试成功或失败方案时返回相应的调用。

xmpp4r.should_receive(:connect).and_return(mock("xmpp4r"))

如果宝石未经过测试,则与您自己没有进行任何测试的情况大致相同。您应该考虑使用另一个gem或自己测试它(甚至使用TDD创建一个)。