我的测试夹具通常具有“设置”成员函数,这些函数在构造夹具期间无法调用,因为它们具有将根据将要运行的测试而改变的参数。编写它们是为了避免代码重复。
这些功能是否会产生无效的测试,因为它们依赖于复杂的非生产方式进行设置? 他们的存在是否表明我的班级设计糟糕且难以建造? 这些方法应该由我自己测试的课程提供给我的测试吗?
答案 0 :(得分:1)
这可能只是意味着您需要使用不同的参数来参数化构造以测试不同的排列,在这种情况下,我认为它是100%合法的。 DRY在代码中和代码中一样适用。
不同的测试构建场景可能表明您的班级没有遵循单一责任原则。你可以有几种不同的构造方法,因为你需要在几个不同的状态下构建类。显着不同的构造可能意味着测试对象的混合责任。
答案 1 :(得分:0)
每个测试都应测试某种功能的某种功能。所以如果设置不是生产标准,只要测试的目的是生产用途就可以了。
因此,如果您正在创建一个Add(int a,int b)测试,那么只要在生成环境中完全按照生成环境生成int a和int b就无关紧要了给出了正确的答案。
您还应该为“int a”和“int b”的生成创建一个测试,以便您知道何时创建它们将成为预期的对象。
我希望这很清楚。 如果没有,我会编辑。
答案 2 :(得分:0)
如果您为每个测试设置了不同的设置,则可能需要在所需的测试中运行设置。 在您的设置中包含大量代码可能表明您正在使用集成测试而不是单元测试。 使用模拟对象可以大大减少测试设置逻辑。
单元测试应该具有单一的责任性,易于理解和维护,我认为参数化设置可能会对此造成影响。