我正在为同事审核一些代码,发现测试单元类中有一个测试看起来像这样:
// setup
Foo f = ...
FooToBarConverter ftb = ...
Bar b = ftb.Convert(f); // It is easier to create a Bar by converting it from a Foo than making one 'from scratch'
// test
systemUnderTest.DoSomething(bar);
// assert
Assert.IsTrue(...)
显然,这是一个集成测试,因为它测试了FooToBarConverter以及系统下的测试,因为它是唯一覆盖DoSomething()方法的测试。我建议将此测试移动到集成测试解决方案,但这会降低单元测试的代码覆盖率。我们的目标是实现100%的单元测试代码覆盖率(是的-我知道100%覆盖率是手段而不是目的本身,100%覆盖的代码不一定是100%正确的代码)。
如果我们将集成测试移到外面,是否有理由创建单元测试来恢复覆盖率?
或者,我们的目标是错误的,应该针对所有测试组合实现100%覆盖率(甚至追求100%覆盖率)?
谢谢。
编辑/更新:
这不是关于如何适当地对系统进行单元测试的问题(我知道这不是单元测试的原因,我知道如何将其正确转换为单元测试),也不是关于FooToBarConverter覆盖范围的问题。我想听听关于系统下测试的代码覆盖率的意见:系统下的集成测试是否足够?还应该进行单元测试吗?