使用Json返回对Web API进行单元测试
本文关键字:单元测试 API Web Json 返回 使用 | 更新日期: 2023-09-27 18:07:20
我是全新的单元测试,我需要为当前的项目这样做。我有很多测试模型类和MVC控制器的例子,但我有几个web API控制器有一个Json返回,我需要进行单元测试。我应该用这些测试什么,我该怎么做?
第一个不带参数的例子
public class DefaultController : ApiController
{
private TestEntities db = new TestEntities();
[AcceptVerbs("GET")]
public IHttpActionResult FirstAPI()
{
var myQuery = (from p in db.Participants
select new
{
p.ID,
p.Name,
p.MemberType
});
return Json(myQuery);
}
}
第二个接受两个参数的例子
public class DefaultController : ApiController
{
private TestEntities db = new TestEntities();
[AcceptVerbs("GET")]
public IHttpActionResult SecondAPI(int id, string name)
{
var myQuery = (from p in db.Participants
where p.ID == id && p.Name == name
select new
{
p.ID,
p.Name,
p.MemberType
});
return Json(myQuery);
}
}
你应该像测试其他东西一样对它进行单元测试…调用它并检查结果。在本例中,结果类型为HttpActionResult
,它似乎只有一个操作。
async
,并检查的结果,它似乎是HttpResponseMessage
类型。
类型具有您可以检查的属性,以验证您正在测试的操作的结果。最重要的属性可能是Content
,它包含响应的内容。您的测试将基本上读取这些内容,并根据预期结果验证它们。
这里的更大的问题实际上并不是验证结果,只要您像上面描述的那样查看返回值,这就很容易了。单元测试的真正问题是:
private TestEntities db = new TestEntities();
您的控制器与依赖项紧密耦合。除非您在依赖项中有适当的mock设置,否则您的单元测试也将与该依赖项紧密耦合。
抽象接口背后的依赖,并使用依赖注入来解耦你的控制器是强烈推荐的。这样,您的单元测试就可以提供具有已知的、可预测行为的模拟依赖项。
下面的代码运行得很好:
var result = controller.Test(expectedArg) as JsonResult<MyClass>;
Assert.AreEqual(expectedResult, result.Content);