【问题标题】:How to unit test a controller with XUnit, Moq and AutoFixture?如何使用 XUnit、Moq 和 AutoFixture 对控制器进行单元测试?
【发布时间】:2021-02-12 13:08:06
【问题描述】:

我有一个带有以下签名的控制器:

public CustomerTypeController(
    IHttpContextAccessor accessor,
    IPrincipalProvider provider,
    IMapper mapper, 
    ILogger<CustomerTypeController> logger,
    ICustomerTypeService customerTypeService)
{ }

我还设置了AutoDataAttribute

public class AutoMoqDataAttribute : AutoDataAttribute
{
    public AutoMoqDataAttribute()
        : base(() => 
        {
            var fixture = new Fixture().Customize(new CompositeCustomization(
                new AutoMoqCustomization(),
                new SupportMutableValueTypesCustomization()));

            fixture.Behaviors.OfType<ThrowingRecursionBehavior>()
                .ToList()
                .ForEach(x => fixture.Behaviors.Remove(x));

            fixture.Behaviors.Add(new OmitOnRecursionBehavior());

            return fixture;
        })
    { }
}

现在我的Theory 看起来像这样:

[Theory, AutoMoqData]
public void GetWhenHasCustomerTypesShouldReturnOneCustomerType(
    IFixture fixture,
    [Frozen] Mock<ICustomerTypeService> service,
    CustomerTypeController sut)
{
    //Arrange
    var items = fixture.CreateMany<Model.CustomerType>(3).ToList();

    //Act
    var result = sut.Get(1);

    //Assert
    Assert.IsType<OkResult>(result);
}

在从控制器获取项目之前,我是否需要使用项目设置服务?如果是,服务是如何设置的?

【问题讨论】:

    标签: c# asp.net-core moq xunit.net autofixture


    【解决方案1】:

    在测试方法中使用[NoAutoProperties]属性修饰控制器参数。

    详情请参阅this answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 2016-12-25
      • 2021-10-15
      • 2020-01-31
      • 1970-01-01
      相关资源
      最近更新 更多