我的测试代码:
var browser = new Browser(
with =>
{
with.Module<PatientSearchModule>();
with.Dependencies(patientSearchService, mappingEngine);
with.ContextFactory(new TestingContextFactory());
});
browser.Get("/test", with => with.HttpRequest());
我的测试上下文工厂是这样的:
public class TestingContextFactory : INancyContextFactory
{
public NancyContext Create(Request request)
{
return new NancyContext();
}
}
我收到以下异常:
Object reference not set to an instance of an object.
at Nancy.Conventions.StaticContentConventionBuilder.<>c__DisplayClass2.<AddDirectory>b__0(NancyContext ctx, String root)
at Nancy.DefaultStaticContentProvider.GetContent(NancyContext context)
at Nancy.NancyEngine.HandleRequest(Request request, Func`2 preRequest, CancellationToken cancellationToken)
at Nancy.NancyEngineExtensions.HandleRequest(INancyEngine nancyEngine, Request request, Func`2 preRequest)
at Nancy.Testing.Browser.HandleRequest(String method, Url url, Action`1 browserContext)
at Nancy.Testing.Browser.HandleRequest(String method, String path, Action`1 browserContext)
现在,我明白我可能做错了什么。 但是空引用并不是帮助我知道如何修复我的代码的错误。
该实现显然违反了INancyContextFactory
的“合同”,这要求实现完全填充返回的NancyContext
,其中至少包括将给定的request
传递给它。 我同意 API 应该更好地执行它。 最好通过NancyContext
ctor。
我真的不确定我们可以做些什么来防止这种情况发生。 是的,在这种情况下,我们可以通过将它作为参数添加到NancyContext
ctor 来强制设置请求(这将是一个重大的突破性变化),但这归结为简单的 _always_ 检查_everything_,对于空引用,_everywhere_。 归根结底,不可能“保护”用户免受自己的伤害 :wink:
@khellang你觉得那个补丁怎么样?