using System;
using System.Reflection;
using AutoFixture;
using AutoFixture.Xunit2;
using Elsa.Testing.Shared.AutoFixture.Behaviors;
using Elsa.Testing.Shared.AutoFixture.SpecimenBuilders;
namespace Elsa.Testing.Shared.AutoFixture.Attributes
{
///
/// Customizes the parameter so that the
/// created by Moq will resolve services of the appropriate type, creating
/// them using Autofixture.
///
///
public class WithAutofixtureResolutionAttribute : CustomizeAttribute
{
public override ICustomization GetCustomization(ParameterInfo parameter)
=> new AutofixtureServiceProviderCustomization();
class AutofixtureServiceProviderCustomization : ICustomization
{
public void Customize(IFixture fixture)
{
var behavior = BehaviorFactory.GetPostprocessingBehavior(AutofixtureResolutionServiceProviderSpecimenBuilder.AddAutofixtureResolution);
fixture.Behaviors.Add(behavior);
}
}
}
}