С Rider 2018.2 мы получили поддержку dotCover для наших модульных тестов, и это здорово, и я сразу же воспользовался этим. Однако я столкнулся со странной проблемой с ошибками модульных тестов, только когда они выполняются для покрытия, и только когда для записи информации используется ITestOutputHelper xUnit. Ошибка не совсем понятна, почему, но, может быть, происходит некоторое взаимодействие между библиотеками, когда оно выполняется именно таким способом, который мне не понятен.
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.CastleProxyFactory + IncludeObjectMethodsHook» в сборке «Moq, версия = 4.9.0.0, Culture = нейтральный, PublicKeyToken = 69f491c39445e920» не помечен как сериализуемый.
Мои файлы package.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.