gpt4 book ai didi

具有派生类型的 AutoFixture

转载 作者:行者123 更新时间:2023-12-01 11:47:46 25 4
gpt4 key购买 nike

在我使用 AutoFixture 之前的日子里,我可能做了以下安排来设置名为 CustomerService 的服务的单元测试:

public void TestName()
{
//Arrange
var fakeResponse = new DerivedHttpResponse();
var fakeHandler = new FakeHttpMessageHandler(fakeResponse); // takes HttpResponse
var httpClient = new HttpClient(fakeHandler);

var sut = new CustomerService(httpClient);
// ...
}

这种冗长的安排似乎是AutoFixture擅长解决的问题。我想我也可以使用 AutoFixture 重写该排列,看起来像这样:

public void TestName([Frozen] DerivedHttpResponse response, CustomerService sut)
{
//Nothing to arrange
// ...
}

我的问题是,考虑到我有许多派生的 HttpResponse 类型,我想从测试方法换到测试方法,有没有办法配置 AutoFixture 为我做这件事?

最佳答案

您可以将 [Frozen] 属性与命名参数 As 一起使用:

[Theory, AutoData]
public void TestName(
[Frozen(As = typeof(HttpResponse))] DerivedHttpResponse response,
CustomerService sut)
{
// 'response' is now the same type, and instance,
// with the type that the SUT depends on.
}

命名参数 As 指定卡住参数值应映射到的类型。


如果 HttpResponse 类型是抽象的,您将必须创建一个 AutoDataAttribute 派生类型,例如AutoWebDataAttribute

public class AutoWebDataAttribute : AutoDataAttribute
{
public AutoWebDataAttribute()
: base(new Fixture().Customize(new WebModelCustomization()))
{
}
}

public class WebModelCustomization : CompositeCustomization
{
public WebModelCustomization()
: base(
new AutoMoqCustomization())
{
}
}

在这种情况下,您可以使用 [AutoWebData]

关于具有派生类型的 AutoFixture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14410991/

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