我可能在这里错过了一些简单的事情......
我有以下方法要进行单元测试:
public bool In(Request request)
{
return ("Admin" == (string)request.Session["Type"]);
}
事实证明这比我想象的要简单,因为我找不到正确设置Request
对象传递给方法的方法。
直接新建一个Request
会导致一个未启用会话的对象,而我的原始尝试使用临时ConfigurableBootstrapper
实现和模块是非常不成功的。
(我发现this blog post,但没有代码来说明解释,我无法做太多;我也可以在AppHarbify代码中找不到实际的例子。)
那么,获取Request
对象的最简单/推荐方法是什么?我可以使用Session
?
谢谢!
答案 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
希望这有助于至少让你朝着正确的方向前进。