InternalVisibleTo和动态语言运行时不能很好地协同工作吗?

时间:2015-10-07 01:07:34

标签: c# unit-testing mstest dynamic-language-runtime internalsvisibleto

我在Universal Windows exe项目中有以下类(不包括实际功能)。

sealed class DataPage
{
    public DataPage(dynamic page)
    {
        Data = page;
    }

    public dynamic Data { get; private set; }
}

此程序集包含InternalsVisibleTo属性,因此我可以对内部类进行单元测试:

[assembly:InternalsVisibleTo("PictureFrame.UnitTests")]

单元测试项目(通用Windows单元测试项目)编译得很好。但是,下面的测试会在将dynamic对象传递给DataPage构造函数时抛出异常。除了传递的实例属于object类型时,它不会发生。

[TestMethod]
public void ReproException()
{
    var o = new object();
    var page = new DataPage(o); // this works fine

    var d = (dynamic)o;
    var page1 = new DataPage(d); // this throws exception
}

抛出的异常是:'PictureFrame.Model.DataPage.DataPage(object)' is inaccessible due to its protection level.

当然,如果内部类与动态对象进行交互,那么我可以将它们标记为公共内容,但这是否可以使用?这是我第一次使用InternalsVisibleTodynamic并且对此行为感到有些惊讶,但也许这是DLR视角的边缘情况。

(在现实生活中,动态对象是从json反序列化的ExpandoObject。)

0 个答案:

没有答案