mocking - 此测试是否正确使用了AutoFixture和Moq?

标签 mocking moq autofixture

此测试是否正确使用了AutoFixture和Moq?是否写得尽可能简洁?如预期的那样,测试失败,并在编写正确的实现后通过。

[Fact]
public void CustomerPropertyIsCorrect()
{
    var fixture = new AutoMoqFixture();

    var expected = fixture.Create<CardHolderCustomer>();
    var builderMock = fixture
        .Freeze<Mock<ICustomerAdapter>>()
        .Setup(x => x.BuildCustomer()).Returns(expected);

    var sut = fixture.Create<CardHolderViewModel>();
    var actual = sut.Customer;

    Assert.Equal(expected, actual);
}

最佳答案

看起来不错!但是,您也可以将其与xUnit.net declaratively一起使用extension

假设测试中使用的类型定义为:

public class CardHolderCustomer
{
}

public interface ICustomerAdapter
{
    CardHolderCustomer BuildCustomer();
}

public class CardHolderViewModel
{
    private readonly ICustomerAdapter adapter;

    public CardHolderViewModel(ICustomerAdapter adapter)
    {
        if (adapter == null)
            throw new ArgumentNullException("adapter");
        this.adapter = adapter;
    }

    public CardHolderCustomer Customer
    {
        get
        {
            return this.adapter.BuildCustomer();
        }
    }
}

原始测试可以写为:

[Theory, DomainTestConventions]
public void CustomerPropertyIsCorrect2(
    CardHolderCustomer expected,
    [Frozen]Mock<ICustomerAdapter> builderStub,
    CardHolderViewModel sut)
{
    builderStub
        .Setup(x => x.BuildCustomer())
        .Returns(expected);

    var actual = sut.Customer;

    Assert.Equal(expected, actual);
}
DomainTestConventionsAttribute定义为:

internal class DomainTestConventionsAttribute : AutoDataAttribute
{
    internal DomainTestConventionsAttribute()
        :base(new Fixture().Customize(new DomainTestConventions()))
    {
    }
}
DomainTestConventions定义为:

internal class DomainTestConventions : CompositeCustomization
{
    internal DomainTestConventions()
        :base(new AutoMoqCustomization())
    {
    }
}

请注意,DomainTestConventions源自CompositeCustomization,这基本上意味着您可以创建更多定制,并将它们作为参数添加到基本构造函数中。

您还可以阅读:
  • The order of AutoFixture Customizations matter
  • AutoData Theories with AutoFixture
  • Keep your unit tests DRY with AutoFixture Customizations
  • AutoFixture, xUnit.net, and Auto Mocking

  • 希望能有所帮助。

    关于mocking - 此测试是否正确使用了AutoFixture和Moq?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15208879/

    相关文章:

    unit-testing - 单元测试站点地图节点

    c# - ReturnsAsync 的最小起订量回调

    asp.net-web-api - 单元测试 WebApi2 传递 header 值

    c# - 如何使用AutoFixture实现日期限制?

    c# - 带有 Entity Framework 的 AutoFixture - 将 int 映射到枚举

    c# - Moq 断言一个抽象方法被调用

    java - 使用 PowerMock- EasyMock 时意外的方法调用

    python - 测试在python中调用两次的函数

    javascript - 使用 jsdom 更改 HTML 标签

    c# - 如何 Moq NHibernate 扩展方法?