2

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

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

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

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

(我找到了这篇博文,但是没有代码来说明解释,我不能做太多;我也找不到 AppHarbify 代码中的实际示例。)

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

谢谢!

4

1 回答 1

0

创建一个包装请求的接口。就像是..

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

希望这至少可以帮助您朝着正确的方向前进。

于 2013-06-05T03:17:42.213 回答