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

Unit testing 针对Nancy.Request.Session的单元测试,unit-testing,nancy,Unit Testing,Nancy,我可能错过了一些简单的东西 我有以下方法要进行单元测试: public bool-In(请求) { return(“Admin”=(string)request.Session[“Type”]); } 事实证明,这并不像我预期的那么容易,因为我找不到一种方法来正确设置请求对象以传递给该方法。 直接更新一个请求会导致一个未启用会话的对象,而我使用临时ConfigurableBootstrapper实现和模块的粗略尝试都失败了 (我发现了,但是没有代码来说明解释,我无法理解它;在AppHarbif

我可能错过了一些简单的东西

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

public bool-In(请求)
{
return(“Admin”=(string)request.Session[“Type”]);
}
事实证明,这并不像我预期的那么容易,因为我找不到一种方法来正确设置
请求
对象以传递给该方法。 直接更新一个
请求
会导致一个未启用会话的对象,而我使用临时
ConfigurableBootstrapper
实现和模块的粗略尝试都失败了

(我发现了,但是没有代码来说明解释,我无法理解它;在AppHarbify代码中也找不到实际的例子。)

那么,获取我可以使用的
会话的
请求
对象的最简单/推荐方法是什么


谢谢

创建一个包装请求的接口。类似于

public interface IRequestWrapper {
    Session Session { get; set; }
}
将此接口而不是实际实现传递给“In”方法

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

        var sut = new SomeClass();

        var result = sut.In(new FakeRequest());
当然,FakeRequest将实现IRequestWrapper,会话对象可以存根以返回“Admin”

还有其他方法可以做到这一点,例如,使用模拟/隔离框架,即Moq


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

您应该使用声明来验证用户是管理员还是现在的管理员。
        var sut = new SomeClass();

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