Noe*_*oel 18 .net unit-testing asp.net-web-api
是否有示例代码显示单元测试从api控制器继承的控制器?我正在尝试对POST进行单元测试,但它失败了.我相信我需要设置HttpControllerContext进行测试,但不知道谢谢
Mar*_*nes 10
此代码应演示后测试的基础知识.假设您有一个注入控制器的存储库.我在这里使用MVC 4 RC而不是Beta,如果你使用Beta的Request.CreateResponse(...有点不同,请给我一个大喊......
鉴于控制器代码有点像这样:
public class FooController : ApiController
{
private IRepository<Foo> _fooRepository;
public FooController(IRepository<Foo> fooRepository)
{
_fooRepository = fooRepository;
}
public HttpResponseMessage Post(Foo value)
{
HttpResponseMessage response;
Foo returnValue = _fooRepository.Save(value);
response = Request.CreateResponse<Foo>(HttpStatusCode.Created, returnValue, this.Configuration);
response.Headers.Location = "http://server.com/foos/1";
return response;
}
}
Run Code Online (Sandbox Code Playgroud)
单元测试看起来有点像这样(NUnit和RhinoMock)
Foo dto = new Foo() {
Id = -1,
Name = "Hiya"
};
IRepository<Foo> fooRepository = MockRepository.GenerateMock<IRepository<Foo>>();
fooRepository.Stub(x => x.Save(dto)).Return(new Foo() { Id = 1, Name = "Hiya" });
FooController controller = new FooController(fooRepository);
controller.Request = new HttpRequestMessage(HttpMethod.Post, "http://server.com/foos");
//The line below was needed in WebApi RC as null config caused an issue after upgrade from Beta
controller.Configuration = new System.Web.Http.HttpConfiguration(new System.Web.Http.HttpRouteCollection());
var result = controller.Post(dto);
Assert.AreEqual(HttpStatusCode.Created, result.StatusCode, "Expecting a 201 Message");
var resultFoo = result.Content.ReadAsAsync<Foo>().Result;
Assert.IsNotNull(resultFoo, "Response was empty!");
Assert.AreEqual(1, resultFoo.Id, "Foo id should be set");
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13056 次 |
最近记录: |