【发布时间】:2013-12-22 04:56:11
【问题描述】:
我在测试中有一组有效的命令式代码,我正在尝试将其归结为基本的测试约定。
我的测试如下所示:
[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 配置和请求消息属性设置为默认的非空值
【问题讨论】:
-
您在使用什么
ApiController类型? ASP.NET Web API?哪个版本? -
我的 NuGet 包管理器说 ASP.NET Web API 版本 5.0.0
标签: c# autofixture