我正在为一位同事查看一些代码,并在单元测试类中遇到了一个看起来像这样的测试:
// 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% 的覆盖率(或者甚至完全达到 100% 的目标)?
谢谢你。
编辑/更新:
这不是关于如何正确地对被测系统进行单元测试的问题(我知道这不是单元测试的原因,并且我知道如何正确地将其转换为单元测试),也不是关于覆盖率的问题FooToBar 转换器。我想对被测系统的代码覆盖率提出意见:对被测系统的集成测试是否足够?还是应该有单元测试?