在Rider 2018.2中,我们为单元测试用例提供了dotCover支持,这很棒,我立即采取行动以利用它。但是,我遇到了一个奇怪的问题,即单元测试仅在进行覆盖测试时才失败,并且只有在使用xUnit的ITestOutputHelper写入信息时才会失败。该错误的原因尚不清楚,但是在以这种特定方式运行时,库之间可能存在一些交互作用,这对我来说还不清楚。
using System.Security.Principal;
using System.Threading;
using Moq;
using Xunit;
using Xunit.Abstractions;
public class CoverFail
{
public ITestOutputHelper OutputHelper { get; }
public CoverFail(ITestOutputHelper outputHelper)
{
OutputHelper = outputHelper;
}
[Fact]
public void Test()
{
var mockPrincipal = new Mock<IPrincipal>();
var mockIdentity = new Mock<IIdentity>();
mockPrincipal.SetupGet(m => m.Identity).Returns(mockIdentity.Object);
Thread.CurrentPrincipal = mockPrincipal.Object;
OutputHelper.WriteLine("Goodbye");
}
}
生成的异常是:
System.Runtime.Serialization.SerializationException 程序集“ Moq,版本= 4.9.0.0,区域性=中性,PublicKeyToken = 69f491c39445e920”中的类型“ Moq.CastleProxyFactory + IncludeObjectMethodsHook”未标记为可序列化。
我的packages.config是:
<packages>
<package id="Castle.Core" version="4.3.1" targetFramework="net471" />
<package id="Moq" version="4.9.0" targetFramework="net471" />
<package id="System.Threading.Tasks.Extensions" version="4.3.0" targetFramework="net471" />
<package id="System.ValueTuple" version="4.4.0" targetFramework="net471" />
<package id="xunit" version="2.1.0" targetFramework="net45" />
<package id="xunit.abstractions" version="2.0.0" targetFramework="net45" />
<package id="xunit.assert" version="2.1.0" targetFramework="net45" />
<package id="xunit.core" version="2.1.0" targetFramework="net45" />
<package id="xunit.extensibility.core" version="2.1.0" targetFramework="net45" />
<package id="xunit.extensibility.execution" version="2.1.0" targetFramework="net45" />
</packages>
该项目面向.NET 4.7.1并使用C#7.0语言级别。