.net核心3.0中的动态是否发生了变化?

时间:2020-04-03 18:33:51

标签: c# dynamic

我正在编写一个单元测试,以测试调用控制器方法的结果。我知道一个事实,如果参数错误,它将返回带有单个属性“错误”的匿名对象。

[Test]
public async Task should_inform_about_invalid_param()
{
    var res = await Controller.Index("Donkey");
    Assert.That(res, Is.Typeof<BadRequestObjectResult>());
    var obj = (res as BadRequestObjectResult).Value;
    dynamic dyn = obj; 
    string errorText = dyn.error;
    Assert.That(errorText, Contains.Substring("Donkey"));
}

实际测试无所谓。但是,我希望这能奏效并能够得出结果。相反,我得到以下异常

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:“对象”不包含“错误”的定义

现在,我可以使用反射来提取错误,但是它很丑陋且麻烦。

var errorText = obj.GetType().GetProperty("error").GetValue(obj) as string

这个改变了吗?我觉得过去我总是可以使用dynamic来提取动态对象的值。

编辑: 附有截图。 enter image description here

1 个答案:

答案 0 :(得分:0)

显然,此问题与以下事实有关:匿名类型在声明程序集内部。

一种解决方案是用[assembly:InternalsVisibleTo(UnitTestLibraryName)]标记托管程序集 这样做可以动态访问匿名类型的成员。

相关问题