3

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を構成する方法はありますか?

4

1 に答える 1

5

[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タイプが抽象である場合は、派生タイプを作成する必要がありますAutoDataAttributeAutoWebDataAttribute

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

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

その場合は、[AutoWebData]代わりに使用します。

于 2013-01-19T05:15:20.277 に答える