Я пытаюсь протестировать приватную функцию в .net.Эта закрытая функция возвращает коллекцию типа myClass
, которая является внутренним классом.
Я использовал атрибут сборки InternalsVisibleTo
, так что тип myClass
известен моему тестовому проекту.
Вот код, который я хочу протестировать:
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, так как это внутренний класс, который не должен иметь доступа.Это корень проблемы, на мой взгляд.