处理程序只是一个类——理想情况下具有最小的依赖关系——所以你的单元测试可以只测试类中的隔离逻辑。
如果您想测试状态代码,我建议(基于非常少的经验!)使用 OpenRasta 自托管。
这是我最近写的一个测试(有些改变):
[TestMethod]
public void POST_with_inaccurate_contentLength_returns_405()
{
var resource = GetResource();
IRequest request = new InMemoryRequest
{
HttpMethod = "POST",
Uri = new Uri("http://localhost/Resource"),
};
request.Headers.ContentLength = 16; //wrong!
request.Entity.Stream.Write(resource.Content, 0, resource.Content.Length);
var response = _host.ProcessRequest(request);
Assert.AreEqual(405, response.StatusCode);
}
我应该补充一点,主机是在 TestInitialize 方法中设置的,如下所示:
_host = new InMemoryHost(new Configuration());
_host.Resolver.AddDependencyInstance(typeof(IFileResourceRepository), _repository, DependencyLifetime.Singleton);
...并在 TestCleanup 方法中进行清理。