当前位置: 首页 > 编程语言 > C#

需要为ApiControllers创建约定分享

时间:2023-04-10 14:49:24 C#

C#学习教程:需要为ApiControllers创建约定我的测试看起来像这样:[Theory,BasicConventions]publicvoidGetVersionOnSiteVersionControllerReturnsASiteVersion(IFixturefixture){fixture.OmitAutoProperties=true;SiteVersionexpected=fixture.Create();SiteVersion实际=null;varsut=fixture.Create();varresponse=sut.GetSiteVersion().ExecuteAsync(newCancellationToken()).Result.TryGetContentValue(outactual);actual.AsSource().OfLikeness().ShouldEqual(预期);我还有一个允许它工作的自定义,即通过将HttpConfiguration和HttpRequestMessage设置为默认的非空值。公共类ApiControllerCustomization:ICustomization{publicvoidCustomize(IFixturefixture){varorigin=fixture.OmitAutoProperties;fixture.OmitAutoProperties=true;varsut=fixture.Create();sut.Configuration=fixture.Create();sut.Request=fixture.Create();fixture.Inject(sut);fixture.OmitAutoProperties=原点;起初,这看起来很难看,但如果我使用Build()。忽略()。with(config).with(request),它关闭了构建这些实例所需的automoq定制。其次,这仅适用于SiteVersionController。对于我所有的ApiControllers,我更愿意概括(也许这是个坏主意,但在我尝试之前我不会知道)。基本上我的约定如下:对于所有ApiControllers,创建它们时不带自动属性,但将http配置和请求消息属性设置为默认的非空值ApiControllers很难连接,因为您需要为它们分配某些属性才能进行所有操作工作。至少,您需要分配Request属性,否则Controller无法调用Request.CreateResponse。因此,关闭ApiController实例的自动属性并不是一个好的策略。相反,您可以配置AutoFixture以正确连接HttpRequestMessage实例。WebAPI1对于ASP.NETWebAPI1,我通常使用这样的自定义:.Add(HttpPropertyKeys.HttpConfigurationKey,newHttpConfiguration())));由于默认情况下启用自动属性,因此ApiController.Request将被分配一个适当的HttpRequestMessage实例。除了自动模拟定制,Fixture现在可以创建所有ApiController类的实例。WebAPI2使用ASP.NETWebAPI2(5.0.0.0),事情有点复杂,但经过反复试验,我得到了这个自定义通过808测试:publicclassWebApiCustomization:ICustomization{publicvoidCustomize(IFixturefixture){fixture.Customize(c=>c.OmitAutoProperties());fixture.Customize(c=>c.Do(x=>x.Properties.Add(HttpPropertyKeys.HttpConfigurationKey,fixture.Create())));fixture.Customize(c=>c.Without(x=>x.ClientCertificate));}}约定如果将其包装到[AutoData]属性中,您应该能够将测试重构为:ApiControllers创建同意共享的所有内容。如果对你有用,需要了解更多C#学习教程,希望你多多关注——【理论、基础约定】varresponse=sut.GetSiteVersion().ExecuteAsync(newCancellationToken()).Result.TryGetContentValue(outactual);actual.AsSource().OfLikeness().ShouldEqual(预期);}本文收集自网络,不代表立场。如涉及侵权请点右联系管理员删除。如需转载请注明出处: