InternalsVisibleTo кажется проигнорированным

Я пытаюсь выполнить модульное тестирование частной функции в .net. Эта закрытая функция возвращает коллекцию типа myClass , которая является внутренним классом.

Я использовал атрибут сборки InternalsVisibleTo , так что тип myClass известен моему проекту Test.

Вот код, который я хочу протестировать:

namespace MyProject
{
    public class Class1
    {
         private List<myClass> myFunction()
         {
             return new List<myClass>();
         }

         internal class myClass
         {
             public int MyProperty { get; set; }
         }   
     }
 }

[TestMethod()]
[DeploymentItem("MyProject.dll")]
public void myFunctionTest()
{
    Class1_Accessor target = new Class1_Accessor(); 
    List<Class1_Accessor.myClass> expected = null; 
    List<Class1_Accessor.myClass> actual;
    actual = target.myFunction();
    Assert.AreEqual(expected, actual);
    Assert.Inconclusive("Verify the correctness of this test method.");
}

и в моем файле информации о сборке:

[assembly: InternalsVisibleTo("MyProject.Test")]

Итак, почему Visual Studio устанавливает тип списка на Class1_Accessor.myClass с myClass знаком с моим тестовым проектом?

Из-за этого я получаю ошибку времени выполнения (не могу преобразовать тип myClass в тип Class1_Accessor.myClass ).

Поскольку myFunction является закрытой, VisualStudio генерирует следующий код (который подходит для большей части)

[Shadowing("MyProject.Class1")]
public class Class1_Accessor : BaseShadow
{
    protected static PrivateType m_privateType;

    [Shadowing(".ctor@0")]
    public Class1_Accessor();
    public Class1_Accessor(PrivateObject value);

    public static PrivateType ShadowedType { get; }

    public static Class1_Accessor AttachShadow(object value);
    [Shadowing("myFunction@0")]
    public List<Class1_Accessor.myClass> myFunction();

    [Shadowing("MyProject.Class1+myClass")]
    public class myClass : BaseShadow
    {
        protected static PrivateType m_privateType;

        [Shadowing(".ctor@0")]
        public myClass();
        public myClass(PrivateObject value);

        [Shadowing("MyProperty")]
        public int MyProperty { get; set; }
        public static PrivateType ShadowedType { get; }

        public static Class1_Accessor.myClass AttachShadow(object value);
    }
}

Однако я не понимаю, почему он содержит новое определение myClass, поскольку это внутренний класс, который не должен не нужны никакие аксессуары. На мой взгляд, это корень проблемы.

5
задан Sam 21 February 2012 в 14:54
поделиться