0

我之前一直在使用 asp.net web api 的 beta 版本(在 asp.net mvc 4 打包中)进行开发,一切正常。我还进行了一些测试,这些测试基本上创建了一个控制器并在控制器上调用 Post 或 Get。

现在这些给了我错误说

语言不支持帖子

或者

语言不支持获取

如果我删除测试项目,那么一切正常,我可以构建我的 web api 项目并且它可以工作。

但我的测试不断出错。我什至删除了我的测试项目并从头开始重新创建它,但还是一样。

我所做的只是创建控制器的一个实例并调用 Get / Post,它们是控制器上的实际方法。

4

1 回答 1

0

他是使用 NUnit 和 Moq 测试的 MVC 4 的默认 WebAPI 项目的 Web API 控制器的示例单元测试。

//ValuesController.cs in GetPostExample project
using System.Collections.Generic;
using System.Web.Http;

namespace GetPostExample.Controllers
{
    public class ValuesController : ApiController
    {
        // GET api/values
        public IEnumerable<string> Get()
        {
            return new[] { "value1", "value2" };
        }

        // GET api/values/5
        public string Get(int id)
        {
            return "value";
        }

        // POST api/values
        public void Post(string value)
        {
        }

        // PUT api/values/5
        public void Put(int id, string value)
        {
        }

        // DELETE api/values/5
        public void Delete(int id)
        {
        }
    }
}

//AGetPostValuesControllerShould.cs in GetPostExampleTest project
using System.Web.Http.Controllers;
using GetPostExample.Controllers;
using Moq;
using NUnit.Framework;

namespace GetPostExampleTest
{
    [TestFixture]
    public class AGetPostValuesControllerShould
    {
        private Mock<HttpControllerContext> _controllerContext;

        [SetUp]
        public void Init()
        {
            _controllerContext = new Mock<HttpControllerContext>();
            _controllerContext.SetupAllProperties();
        }

        [Test]
        public void WhenAGetRequestIsCalledToValuesontrollerItShouldReturnAnArrayOfValues()
        {
            var expected = new[] {"value1", "value2"};

            var valuesController = new ValuesController {ControllerContext = _controllerContext.Object};
            var result = valuesController.Get();

            Assert.That(result, Is.EqualTo(expected));
        }
    }
}
于 2012-08-27T12:49:34.460 回答