.net – 单元测试api控制器的示例代码

前端之家收集整理的这篇文章主要介绍了.net – 单元测试api控制器的示例代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否有示例代码显示单元测试继承自api控制器的控制器?
我正在尝试单元测试一个POST,但它是失败的。我相信我需要设置HttpControllerContext进行测试,但不知道如何
谢谢

解决方法

这段代码应该展示后期测试的基础知识。假设您有一个注册到控制器的存储库。我正在使用MVC 4 RC不是测试版,如果你使用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;
    }
}

单元测试会看起来像这样(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");

猜你在找的asp.Net相关文章