公平地说,几乎所有单元测试框架都使用断言或单个断言来确定测试是否已通过或失败?
尤其是,是否有任何框架可以将测试的文本输出与已知的“黄金”版本进行比较,以确定测试是否通过或失败?
我试图测试的代码是有状态的,这些方法可以有很长的历史。我的想法是,我应该生成记录这个历史的文本输出(可能是几十个状态转换),并将它与预期的转换进行比较,因此我得到了整个历史的一次传递/失败。
相反,我可以将单个测试分解为20个测试,为每个测试分别设置一个新的状态,然后断言下一个状态与所有20个测试的预期状态相同,但这似乎是毫无意义和浪费的。
编辑
为了澄清-我不是在找工具,也不是推荐。我已经在做我建议的‘手动’,我希望得到一些关于这是否算“单元测试”的洞察力。我不想问这个问题,因为我认为这会导致大量的否决而没有答案。OTOH,如果任何“真正的”框架也这样做,那么这实际上回答了这个问题。
发布于 2020-02-02 19:42:36
为此,您不需要特定的单元测试框架。我们利用NUnit在几个不同的变体中使用文件比较与“预期文件”实现了这种自动化测试(但它也适用于任何其他单元测试框架)。
虽然这种功能理论上可以由框架提供,但据我的经验,在大多数现实世界中,实现文本比较器是相当容易的,即使您必须根据您的具体需求调整比较器及其周围的基础设施。因此,我怀疑框架是否能为您提供现成的可重用解决方案,您真的可以用它节省大量代码。
有些事情需要考虑:
请注意,如果您想要执行TDD,这些类型的测试不是帮助您的测试,它们不能替代“真正的”单元测试。然而,它们可能是对“后测试”策略的合理支持,以便在代码被扩展或重构时找到回归,但是以前输入数据的行为不应该改变。
发布于 2021-05-06 01:37:48
有一类测试称为批准,它将实际值与手动批准的最后一个良好状态进行比较。https://github.com/approvals快照测试也有一个类似的概念,如注释中提到的。我看到了在各种测试框架中实现的批准测试。
https://softwareengineering.stackexchange.com/questions/404584
复制相似问题