我在測試中有一套工作命令式的代碼,我試圖將它歸結爲基本的測試慣例。需要爲ApiControllers創建約定
我的測試如下所示:
[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);
}
我也有一個自定義,讓這項工作,即通過設置HttpConfiguration
和HttpRequestMessage
爲默認爲非空值。
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;
}
}
首先,這個相貌醜陋,但如果我用建立<>()。省略()與(配置)。隨着(請求),它會關閉它需要建立的情況下,automoq定製。
其次,這隻適用於SiteVersionController。我寧願把它推廣到所有我的ApiControllers(也許這是一個壞主意,但我不會知道,直到我嘗試)。
本質上我的約定將如下所示: 所有ApiControllers,沒有自動屬性創建它們,但不要設置http配置和請求消息的屬性爲默認爲非空值
你正在使用什麼'ApiController'類型? ASP.NET Web API?哪個版本? –
我的NuGet包管理器說ASP.NET Web API版本5.0.0 – cocogorilla
相關:http://stackoverflow.com/q/19908385/126014 –