我正在开发自定义序列化器作为业余爱好项目,我想学习它的 TDD。
我有一个序列化和反序列化简单对象图的测试。 现在我想通过非平凡的反序列化来测试一些复杂的图(即没有无参数构造函数的类、循环引用、大量对象等......)。
我需要测试序列化的“构建”和“提取”图,并且我需要测试创建的图的序列化和反序列化。我想用几个图表测试所有四个操作(从简单到复杂到 super 复杂的图表)。
我应该创建一些非测试类,为所有测试提供预定义的图形,还是每个测试都应该有自己的图形源?
我问这个问题是因为我发现依赖于一个类(图表提供者)的多个测试可能存在问题。
谢谢。
最佳答案
这里不一定有“正确”的答案;这取决于您的项目和测试。拥有一个通用的图源似乎是一个好主意 - 不一定是单个类,但可能是一组类(即图工厂/存储库),它们可以生成代表不同概念的图(类缺少无参数构造函数、循环引用等)。
这并不能避免依赖公共(public)源进行多个测试的风险,但您需要权衡定义每个图的构造的成本。您最终可能会在测试中得到大量重复的代码。重用给定的图形定义是否有好处;图工厂可能是前进的方向。
一个想法可能是针对每个图进行元测试/一组元测试,以便您可以确认图的有效性。关键是,如果一组全部使用相同图表的实际测试突然失败,您首先查看元测试并确保它们通过。您计划的每个测试都应该专注于一个方面(构建/提取等),然后这些测试可以依赖于图的有效性。
关键是让每个测试尽可能简单,这样如果/当它失败时,其失败的原因显而易见 - 通过在其他地方进行图形构建(并单独验证它),您可以拥有您的序列化测试只关注这一点。
关于c# - 复杂的测试 - 依赖于相同的测试数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9472689/