为什么在使用dotCover运行时此测试失败?

时间:2018-08-30 22:23:13

标签: c# rider dotcover

在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语言级别。

0 个答案:

没有答案