unit-testing - 通过输出完整性检查进行单元测试

标签 unit-testing testing

我经常看到将固定输入输入程序的测试,通常通过 diff 对照固定(预期)输出检查生成的输出。如果差异被接受,则代码被视为通过测试。

问题:

1) 这是一个可接受的单元测试吗?

2) 通常单元测试输入是从文件系统中读入的并且很大 xml 文件(也许它们代表一个非常大的系统)。是否应该进行单元测试 触摸文件系统?或者单元测试会即时创建一个小输入 并将其提供给要测试的代码?

3) 如何重构现有代码以进行单元测试?

最佳答案

输出差异

如果您的要求是生成具有一定准确度 的输出,那么这样的测试绝对没问题。最终决定权在您 - “此输出是否足够好?”

与文件系统对话

您不希望您的测试以依赖某些文件存在于某处的方式与文件系统对话,以便您的测试工作(例如,从配置文件中读取值)。这与测试输入资源有点不同——您通常可以将它们嵌入到您的测试(或至少是测试项目)中,将它们视为代码库的一部分,最重要的是它们通常应该被加载 < em>before 测试执行。例如,在测试相当大的 XML 时,将它们存储为单独的文件而不是代码文件中的字符串是合理的(有时可以这样做)。

重点是 - 您希望让您的测试独立且可重复。如果您可以通过在运行时加载文件来实现这一点——那可能没问题。然而,将它们作为代码库/资源的一部分仍然比标准系统文件位于某处更好。

重构

这个问题相当宽泛,但为了让您朝着正确的方向前进 - 您想要介绍更多 solid设计,decouple对象和单独的职责。更好的设计将使测试更容易,而且最重要的是——成为可能。就像我说的,这是一个广泛而复杂的话题,entire books献给它。

关于unit-testing - 通过输出完整性检查进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9229457/

相关文章:

java - 有条件地跳过 TestNG 测试

C++:如何测试编译错误以检查约束

javascript - 使用 Vue Js 运行 Jest 测试时出现 "SyntaxError: Cannot use import statement outside a module"

c++ - 是否可以使用 gtest 或 gmock 模拟被调用函数的返回值?

ruby-on-rails - 如何通过 rspec stub 静态类方法

unit-testing - 测试haskell io的自定义数据类型

unit-testing - 除了 "all of them"作为答案之外,什么类型的应用程序(具体)在单元测试中取得了真正的成功?

android - 加载 JNI 库的应用程序对象上的 Robolectric 坦克。我可以获得解决方法吗?

testing - 为什么 Flask-Mail 在测试期间实际上发送消息

ruby-on-rails-3 - Rails3 + Rspec2 : undefined method `authenticate!' for nil:NilClass