Модульные тесты 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://connect.microsoft.com/VisualStudio/feedback/details/677203/even-after-installing-vs2010-sp1-unit-tests-targeting-3-5-framework-fail-if-they-are-using-private-accessor

Другие вопросы по тегам