У меня успешно работает xUnit / Moq / AutoFixture, так что я автоматически делаю объекты с помощью входных параметров метода тестирования. Я создал собственный атрибут [AutoMoqData]
, который я использую в каждом тесте. Вот код для атрибута:
using System.Linq;
using AutoFixture;
using AutoFixture.AutoMoq;
using AutoFixture.Xunit2;
namespace Shared.TestResources.AutoFixture
{
public class AutoMoqDataAttribute : AutoDataAttribute
{
public AutoMoqDataAttribute() : base(() => new Fixture().Customize(new CompositeCustomization(new AutoMoqCustomization(), new SupportMutableValueTypesCustomization())))
{
this.Fixture.Behaviors.OfType<ThrowingRecursionBehavior>().ToList().ForEach(b => Fixture.Behaviors.Remove(b));
this.Fixture.Behaviors.Add(new OmitOnRecursionBehavior());
}
}
}
Это работает, но я получаю следующее предупреждение компиляции: warning CS0618: 'AutoDataAttribute.Fixture' is obsolete: 'Fixture is created lazily for the performance efficiency, so this property is deprecated as it activates the fixture immediately. If you need to customize the fixture, do that in the factory method passed to the constructor.'
Я приглушил предупреждение, окружив его #pragma
:
using System.Linq;
using AutoFixture;
using AutoFixture.AutoMoq;
using AutoFixture.Xunit2;
namespace Shared.TestResources.AutoFixture
{
public class AutoMoqDataAttribute : AutoDataAttribute
{
public AutoMoqDataAttribute() : base(() => new Fixture().Customize(new CompositeCustomization(new AutoMoqCustomization(), new SupportMutableValueTypesCustomization())))
{
#pragma warning disable 0618
this.Fixture.Behaviors.OfType<ThrowingRecursionBehavior>().ToList().ForEach(b => Fixture.Behaviors.Remove(b));
this.Fixture.Behaviors.Add(new OmitOnRecursionBehavior());
#pragma warning restore 0618
}
}
}
Тем не менее, я хочу установить это правильно и не делать вид, будто предупреждения не существует. Проблема в том, что у меня проблемы с определением правильного синтаксиса для двух строк внутри #pragma
.
Есть идеи?