背景:Visual Studio 2008、C#、.Net 3.5。
我有许多实用程序类根本无法进行单元测试。这主要是因为它们与资源(例如数据库、文件等)交互。
有没有办法可以装饰这些类,以便 Visual Studio 代码覆盖率引擎忽略它们,从而不会降低代码覆盖率百分比?
将项目升级到 .NET 4 时,您将获得 ExcludeFromCodeCoverageAttribute 类。
本文中有关于如何使用 [System.Diagnostics.DebuggerHidden] 或 [System.Diagnostics.DebuggerNonUserCode] 属性从代码覆盖率中排除方法的答案。
根据大卫的评论更新:
从 .NET 4.0 开始,有一个专用属性:[ExcludeFromCodeCoverage]
您想要编写单元测试的原因之一是使代码松散耦合。如果您有兴趣学习如何编写松散耦合的代码(如果您不知道如何编写),您可以阅读这篇文章。
说你可以尝试使用像TypeMock这样的工具,即使你不使用依赖注入原理编写对象,它也可以帮助你模拟你的对象。
TypeMock 是我使用的第一个 Mock 框架。我切换到 Rhino Mocks 因为使用 TypeMock 我不需要足够的纪律来编写松散耦合的代码。
我想您的测试项目中有多个类,因此要考虑的一种选择是直接从覆盖范围中排除测试项目。您可以通过在 ClassTests.csproj 中添加此代码来实现这一点:
<ItemGroup>
<AssemblyAttribute Include="System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute" />
</ItemGroup>
[ExcludeFromCodeCoverage] <-- This
public class NotTestable
{
}