【发布时间】:2012-01-17 21:42:05
【问题描述】:
我有一个返回匿名类型的函数,我想在我的 MVC 控制器中对其进行测试。
public JsonResult Foo()
{
var data = new
{
details = "something",
more = "More"
};
return Json(data);
}
我想验证从 Foo 函数获得的数据,我现在正在做的是获取数据类型并通过反射获取它的属性值。
[Test]
public void TestOne()
{
var data = _controller.Foo().Data;
var details = data.GetType().GetProperty("details").GetValue(data, null);
var more = data.GetType().GetProperty("more").GetValue(data, null);
Assert.AreEquals("something", details);
Assert.AreEquals("More", more);
}
有没有类似这样的简单方法来检查匿名属性?
[Test]
public void TestTwo()
{
var data = (dynamic) _controller.Foo().Data;
var details = data.details; // RunTimeBinderException object does not contain definition for details
var more = data.more;
Assert.AreEquals("something", details);
Assert.AreEquals("More", more);
}
【问题讨论】:
-
由于这是用于单元测试,您可以使用
InternalsVisibleTo。见Anonymous Types are Internal, C# 4.0 Dynamic Beware! 感谢@MarcGravell 指出匿名对象是internal! -
+1 表示 InternalsVisibleTo 建议。像魅力一样工作。
标签: c# .net asp.net-mvc unit-testing anonymous-types