【问题标题】:Unit testing against Nancy.Request.Session针对 Nancy.Request.Session 的单元测试
【发布时间】:2013-06-05 11:17:42
【问题描述】:

我可能在这里遗漏了一些简单的东西......

我有以下方法要进行单元测试:

public bool In(Request request)
{
    return ("Admin" == (string)request.Session["Type"]);
}

事实证明,这比我预期的要容易,因为我找不到正确设置 Request 对象以传递给该方法的方法。 直接新建 Request 会导致对象未启用会话,而我对临时 ConfigurableBootstrapper 实现和模块的粗略尝试非常不成功。

(我找到了this blog post,但是没有代码来说明解释,我不能做太多;我在AppHarbify代码中也找不到实际的例子。)

那么,获取可以使用SessionRequest 对象的最简单/推荐的方法是什么?

谢谢!

【问题讨论】:

  • 您应该使用声明来验证用户是管理员还是现在。

标签: unit-testing nancy


【解决方案1】:

创建一个包装请求的接口。有点像..

public interface IRequestWrapper {
    Session Session { get; set; }
}

将这个接口而不是实际的实现传递给“In”方法。

    public bool In(IRequestWrapper request)
    {
        return ("Admin" == (string)request.Session["Type"]);
    }

现在在您的单元测试中,您将创建一个返回假会话对象的 IRequestWrapper 的假实现?

        var sut = new SomeClass();

        var result = sut.In(new FakeRequest());

当然,FakeRequest 会实现 IRequestWrapper,并且可以对 Session 对象进行存根以返回“Admin”。

还有其他方法可以做到这一点,例如,使用 Mock/Isolation 框架,即 Moq

希望这至少可以帮助您找到正确的方向。

【讨论】:

    猜你喜欢
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 2017-12-30
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多