针对Nancy.Request.Session的单元测试

时间:2013-06-04 23:44:12

标签: unit-testing nancy

我可能在这里错过了一些简单的事情......

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

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

事实证明这比我想象的要简单,因为我找不到正确设置Request对象传递给方法的方法。 直接新建一个Request会导致一个未启用会话的对象,而我的原始尝试使用临时ConfigurableBootstrapper实现和模块是非常不成功的。

(我发现this blog post,但没有代码来说明解释,我无法做太多;我也可以在AppHarbify代码中找不到实际的例子。)

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

谢谢!

1 个答案:

答案 0 :(得分:0)

创建一个包装Request的接口。像...这样的东西。

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

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

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

现在在你的单元测试中你会创建一个假的IRequestWrapper实现,它返回一个Fake Session objtect?

        var sut = new SomeClass();

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

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

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

希望这有助于至少让你朝着正确的方向前进。