单元测试应仅涵盖“功能性”软件
我们正在一个新的软件开发项目中使用StructureMap。团队成员之一已实现了一个单元测试,该单元测试基本上测试了StructureMap容器配置。它通过执行以下操作来做到这一点; 计算为应用程序名称空间中的类配置的程序集的实例数。 在类级别定义期望的实例 断言预期实例与找到的实例总数匹配。 断言预期实例与测试中定义的实例匹配 一个例子是; var repositories = container.GetAllInstances<IEnvironmentRepository>(); Assert.AreEqual(1, repositories .Count()); foundInstances = foundInstances + repositories .Count(); 我们还为下一节课提供“单元测试”; public MyClass(IEnvironmentRepository environmentRepository) { } 在这些测试中,我们模拟了IEnvironmentRepository,因此不会像在实时系统中那样从容器中注入它。 一位同事忽略了对结构图配置的单元测试,并带有“单元测试仅测试它自己的配置”的注释。这显然是测试的目的,我认为这是完全正确的。我要求忽略测试的人删除结构映射配置IEnvironmentRepository(仍然忽略测试)并运行完整的单元测试套件,它们都通过了。然后,我们运行了该应用程序,由于容器配置现在无效,因此该应用程序崩溃了。我认为,这证明了测试的价值,我的同事仍然不同意。他只是简单地说我们不应该测试配置,但是我认为这完全可以进行单元测试。 有很多问题; 这是有效的单元测试吗?-我们正在测试容器的配置,而不是结构图起作用(但我可以看到重叠的部分) 如果不是,您如何在不测试的情况下验证配置。您如何阻止某人意外删除所需的代码行并将其检入? MyClass单元测试是否应该IEnvironmentRepository从容器中解析出实例并传递给它?