Я использую Visual Studio 2015 Enterprise RTM для написания модульных тестов для проекта, который использует Unity Container.
Я обнаружил, что простой акт добавления сборки подделок для Unity, даже не использующий фальшивку, достаточен для создания этого исключения:
System.InvalidProgramException: Common Language Runtime обнаружил недопустимую программу.
Рассмотрим следующие шаги для воспроизведения:
-
Использование среды разработки Visual Studio 2015 Enterprise RTM создает проект Unit Test для таргетинга .NET 4.6
-
Добавить пакет NuGet "Единство" версия 3.5.1404.0
-
Добавить пакет NuGet "CommonServiceLocator" версия 1.2.0
-
Напишите один Unit Test так:
[TestClass]
public class UnitTest1 : IDisposable
{
[TestMethod]
public void TestMethod1()
{
new ResolvedArrayParameter<IDisposable>(new IDisposable[] {this});
}
void IDisposable.Dispose()
{
}
}
-
Проверить тестовые проходы
-
Щелкните правой кнопкой мыши ссылку Microsoft.Practices.Unity и выберите "Добавить сборку подделок"
-
Повторно запустите тест
-
Следите за следующим замечательным тестом:
Имя теста: TestMethod1
Test FullName: UnitTestProject11.UnitTest1.TestMethod1
Источник теста: c:\temp\UnitTestProject11\UnitTestProject11\UnitTest1.cs: строка 12
Результат теста: Failed
Продолжительность теста: 0: 00: 00.0572447Результат StackTrace:
в Microsoft.Practices.Unity.ResolvedArrayParameter..ctor(Тип arrayParameterType, Тип elementType, Object [] elementValues)
в Microsoft.Practices.Unity.ResolvedArrayParameter`1..ctor(Object [] elementValues)
в UnitTestProject11.UnitTest1.TestMethod1() в c:\temp\UnitTestProject11\UnitTestProject11\UnitTest1.cs: строка 13
Сообщение о результатах:
Метод тестирования UnitTestProject11.UnitTest1.TestMethod1 выбрал исключение:
System.InvalidProgramException: Common Language Runtime обнаружил недопустимую программу.
Самая необычная особенность этой проблемы - очевидно, что подделкам даже не нужно появляться непосредственно в коде для отказа манифестации.
Обширный объем прокрутки показывает, что перенацеливание тестового проекта на .NET 4.5 "исправляет" проблему, которая для меня является не стартовой из-за еще одной проблемы Я опубликовал несколько недель назад.
Еще больше возиться с практически всеми настройками подделок (кодовые контракты и т.д.) не давали решения.
Любые советы по этому вопросу будут очень оценены.