我有一组可工作的命令式代码在测试中,并尝试将其概括为一个必要的测试惯例。
我的测试看起来像下面这样:
[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;
}
}
首先,这看起来很丑,但如果我使用Build<>().omit().with(config).with(request),它会关闭需要构建这些实例的automoq自定义设置。
其次,这仅适用于SiteVersionController。我更希望将其推广到所有我的ApiControllers(也许这是个坏主意,但在尝试之前我不会知道)。
本质上,我的约定如下:对于所有的ApiControllers,创建它们时不要使用自动属性,但将http配置和请求消息属性设置为默认的非null值
ApiController
类型?是 ASP.NET Web API 吗?它的版本是什么? - Mark Seemann