gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 03:12:21 25 4
gpt4 key购买 nike

此测试是否正确使用了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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com