Nancy: 使用上下文工厂进行测试时出现 NullReferenceException。

创建于 2015-08-28  ·  3评论  ·  资料来源: NancyFx/Nancy

我的测试代码:

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)

现在,我明白我可能做错了什么。 但是空引用并不是帮助我知道如何修复我的代码的错误。

Bug Up for Grabs

所有3条评论

该实现显然违反了INancyContextFactory的“合同”,这要求实现完全填充返回的NancyContext ,其中至少包括将给定的request传递给它。 我同意 API 应该更好地执行它。 最好通过NancyContext ctor。

不传递请求会在https://github.com/NancyFx/Nancy/blob/7bdfb4f22d8a717a461237342e9d39044c2fb5c4/src/Nancy/Conventions/StaticContentConventionBuilder.cs#L41产生空引用

我真的不确定我们可以做些什么来防止这种情况发生。 是的,在这种情况下,我们可以通过将它作为参数添加到NancyContext ctor 来强制设置请求(这将是一个重大的突破性变化),但这归结为简单的 _always_ 检查_everything_,对于空引用,_everywhere_。 归根结底,不可能“保护”用户免受自己的伤害 :wink:

@khellang你觉得那个补丁怎么样?

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

cody82 picture cody82  ·  9评论

thecodejunkie picture thecodejunkie  ·  4评论

epsitec picture epsitec  ·  5评论

destagia picture destagia  ·  5评论

RTodorov picture RTodorov  ·  6评论