Visual Studio позволяет модульное тестирование частных методов через автоматически сгенерированный класс средства доступа. Я написал тест частного метода, который успешно компилируется, но во время выполнения он не работает. Довольно минимальная версия кода и теста:
//in project MyProj
class TypeA
{
private List<TypeB> myList = new List<TypeB>();
private class TypeB
{
public TypeB()
{
}
}
public TypeA()
{
}
private void MyFunc()
{
//processing of myList that changes state of instance
}
}
//in project TestMyProj
public void MyFuncTest()
{
TypeA_Accessor target = new TypeA_Accessor();
//following line is the one that throws exception
target.myList.Add(new TypeA_Accessor.TypeB());
target.MyFunc();
//check changed state of target
}
Ошибка во время выполнения:
Object of type System.Collections.Generic.List`1[MyProj.TypeA.TypeA_Accessor+TypeB]' cannot be converted to type 'System.Collections.Generic.List`1[MyProj.TypeA.TypeA+TypeB]'.
Согласно intellisense - и, следовательно, я предполагаю, что цель компилятора - имеет тип TypeA_Accessor. Но во время выполнения он имеет тип TypeA, и, следовательно, добавление списка завершается неудачно.
Есть ли способ, как я могу остановить эту ошибку? Или, возможно, более вероятно, что другие советы дают другие люди (я предсказываю, может быть, «не тестируйте частные методы» и «не используйте юнит-тесты для управления состоянием объектов»).