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