我正在尝试为我们的一些webapi调用创建测试,但我在访问结果时遇到了困难。在我看过的所有示例中,他们都在使用OkNegotiatedContentResult。问题是在我们的web api调用中,我们经常将数据包装在匿名对象中,因此我们可以组合数据集。我可能忽略了一些显而易见的事情,但我似乎无法找出检查结果信息以验证它的正确方法。
WebApi代码段
var orderInfo = new
{
Customer = customerInfo,
Order = orderInfo
}
return Ok(orderInfo);
Api Test Snippet
[TestMethod]
public void TestGetOrderInfo()
{
var controller = new OrderController(_repo);
IHttpActionResult results = controller.GetOrderInfo(46);
Assert.IsNotNull(results);
}
如果涉及匿名类型,我如何使用OkNegotiatedContentResult检查结果?
答案 0 :(得分:10)
匿名类型问题的原因是它们是内部类型而不是公共类型,因此您的测试无法使用它们。
如果您在webapi项目中添加了InternalsVisibleTo属性,那么您将能够通过动态引用结果及其内容,例如:
[TestMethod]
public void TestGetOrderInfo()
{
var controller = new OrderController(_repo);
dynamic results = controller.GetOrderInfo(46);
dynamic content = results.Content;
...
}
答案 1 :(得分:2)
匿名对象是创建它们的程序集的内部对象。如果要在单独的程序集(DLL)中进行单元测试,则需要明确说明要使用InternalsVisibleTo属性与该程序集共享内部值。
答案 2 :(得分:1)
[assembly: InternalsVisibleTo("Tests.Unit")]
在文章http://patrickdesjardins.com/blog/how-to-unit-test-a-method-that-return-an-anonymous-type
中找到了这个