Модульные тесты VS2010 с пакетом обновления 1 (SP1), ориентированные на платформу 3.5, не выполняются при использовании частного средства доступа
Я преобразовал решение из VS2008 в VS2010 SP1 и изменил проект модульного тестирования, ориентируясь на платформу 3.5. Помимо исправления нескольких ссылок в проекте модульного тестирования, все работало нормально, и решение было успешно построено. Большинство тестов прошло успешно, но было несколько неудачных. Те, которые потерпели неудачу, используют частный метод доступа. Лично я предпочел бы просто удалить эти тесты, так как я не думаю, что они необходимы, но пока они обнаруживают потенциальную ошибку в SP1, я подумал, что увижу, может ли кто-нибудь найти обходной путь.
Сообщение об ошибке, которое я получаю при выполнении тестов: "Эта сборка построена из среды выполнения, более новой, чем текущая загруженная среда, и не может быть загружена". Насколько я могу судить, похоже, что сборка частного средства доступа создается средой выполнения 4.0 (скорее всего, через Microsoft.VisualStudio.QualityTools.UnitTestFramework), но, поскольку среда выполнения 3.5 загружается MSTest, возникает ошибка.
Я попытался изменить ссылку на Microsoft.VisualStudio.QualityTools.UnitTestFramework, чтобы специально использовать версию 9.0 (в настоящее время это 10.1). Это приводит к ошибке времени компиляции, которая говорит о том, что сборка частного средства доступа использует версию 10.0 Microsoft.VisualStudio.QualityTools.UnitTestFramework, которая выше, чем версия 9.0.
Я удалил сгенерированную сборку приватного средства доступа и воссоздал ее, но у меня все еще есть проблема. Казалось бы, что-то не синхронизировано с VS2010 SP1, когда платформа 3.5 предназначена для проекта модульного тестирования.
Вот код для одного из модульных тестов (опять же, не очень ценный тест, но не в этом пост...):
[TestMethod()]
public void GetNullableCharValue_DBNull_ReturnsNull_Test()
{
object value = DBNull.Value;
Nullable<char> expected = null;
Nullable<char> actual;
actual = RepositoryBase_Accessor.GetNullableCharValue(value);
Assert.AreEqual(expected, actual);
}
3 ответа
Я столкнулся с этой проблемой также. В Visual Studio 2010 SP1 добавлена поддержка проектов модульного тестирования на основе.NET v3.5; Ранее модульные тесты были вынуждены использовать.NET4.
В этой теме есть ошибка Microsoft Connect, но она была только что подана в день, когда я пишу этот ответ, так что никакого существенного ответа от Microsoft пока нет.
Обходной путь, который я выбрал, состоял в том, чтобы вручную сгенерировать сборку частного средства доступа с помощью набора инструментов Visual Studio 2008 и добавить ссылку на него вручную из проекта модульного теста.
Шаги:
1) Удалите автоматически созданный метод доступа из файла .csproj модульного теста:
<ItemGroup>
<Shadow Include="Test References\Assembly.accessor" />
</ItemGroup>
2) Создайте сборку аксессора, совместимого с v3.5, с помощью Publicize VS2008:
"%VS90COMNTOOLS%vsvars32.bat"
publicize Assembly.dll
3) Скопируйте сборку в папку дерева исходных текстов, например, в папку Accessors
:
copy Assembly_Accessor.dll ProjectDir\Accessors\Assembly_Accessors.dll
4) Добавьте сборку средства доступа в качестве ссылки на проект модульного теста с использованием интерфейса Visual Studio:
Project -> Add Reference.. -> Browse...
5) Создайте свое решение с помощью Ctrl+Shift+B и запустите свои тесты.
Теперь вы можете проверить созданную сборку или создать ее автоматически в событии перед сборкой.
Это решение не работает, когда сборки подписаны и версионированы или когда существует класс доступа.
Попробуйте выполнить следующие действия: http://blogs.msdn.com/b/vstsqualitytools/archive/2010/12/19/how-to-re-target-unit-tests-to-net-framework-3-5-in-vs-2010-sp1.aspx