trzeba utworzyć konwencję dla ApiControllers

Mam przetestowany zestaw działającego kodu rozkazującego i staram się go sprowadzić do podstawowej konwencji testowej.

Mój test wygląda następująco:

[Theory, BasicConventions]
public void GetVersionOnSiteVersionControllerReturnsASiteVersion(IFixture fixture)
{
    fixture.OmitAutoProperties = true;
    SiteVersion expected = fixture.Create<SiteVersion>();
    SiteVersion actual = null;

    var sut = fixture.Create<SiteVersionController>();

    var response = sut
        .GetSiteVersion()
        .ExecuteAsync(new CancellationToken())
        .Result
        .TryGetContentValue<SiteVersion>(out actual);

    actual.AsSource().OfLikeness<SiteVersion>().ShouldEqual(expected);
}

Mam również dostosowanie, które umożliwia to działanie, mianowicie poprzez ustawienieHttpConfiguration iHttpRequestMessage do domyślnych wartości innych niż null.

public class ApiControllerCustomization : ICustomization
{
    public void Customize(IFixture fixture)
    {
        var origin = fixture.OmitAutoProperties;
        fixture.OmitAutoProperties = true;
        var sut = fixture.Create<SiteVersionController>();
        sut.Configuration = fixture.Create<HttpConfiguration>();
        sut.Request = fixture.Create<HttpRequestMessage>();
        fixture.Inject<SiteVersionController>(sut);
        fixture.OmitAutoProperties = origin;
    }
}

Po pierwsze, wygląda to brzydko, ale jeśli użyję Build <> (). Omit (). Z (config) .with (request), to wyłącza dostosowanie automoq, którego potrzebuje do zbudowania tych instancji.

Po drugie, działa to tylko w przypadku SiteVersionController. Wolę uogólnić to dla wszystkich moich ApiControllerów (może to zły pomysł, ale nie będę wiedział, dopóki nie spróbuję).

Zasadniczo moja konwencja byłaby następująca:dla wszystkich ApiController utwórz je bez właściwości automatycznych, ale ustaw właściwości konfiguracyjne http i właściwości komunikatu żądania na domyślne wartości inne niż null

questionAnswers(1)

yourAnswerToTheQuestion