Модульные тесты VS2010 с пакетом обновления 1 (SP1), ориентированные на платформу 3.5, не выполняются при использовании частного средства доступа - PullRequest
4 голосов
/ 22 марта 2011

Я преобразовал решение из VS2008 в VS2010 с пакетом обновления 1 (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 ]

3 голосов
/ 29 июня 2011

Я тоже столкнулся с этой проблемой. В Visual Studio 2010 SP1 добавлена ​​поддержка проектов модульного тестирования на основе .NET v3.5; Ранее модульные тесты были вынуждены использовать .NET4.

В теме ошибка Microsoft Connect , но она была только что подана в день, когда я пишу этот ответ, так что никакого существенного ответа от Microsoft пока нет.

Обходной путь, который я выбрал, состоял в том, чтобы вручную сгенерировать сборку частного средства доступа с помощью набора инструментов Visual Studio 2008 и добавить ссылку на него вручную из проекта модульного теста.

Шаги:

1) Удалить автоматически созданный аксессор из модульного теста .csproj file:

<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 и запустите свои тесты.

Теперь вы можете проверить созданную сборку или создать ее автоматически в событии перед сборкой.

1 голос
/ 06 сентября 2011

Это решение не работает, когда сборки подписаны и версионированы или когда существует класс доступа.

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

0 голосов
/ 22 марта 2011
...