MSTest: тесты не выполняются, потому что тесты не загружены или выбранные тесты отключены

У меня есть решение С# со следующей структурой:

mySolution
  myProject
  myProject.MSTests
    References
      Microsoft.VisualStudio.QualityTools.UnitTestFramework
    sutMSTests.cs

sutMSTests.cs:

[TestClass()] 
public class sutMSTests
{
    [TestMethod]
    public void MyTest0()
    {
        Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual(4, 2 + 2);
    } 
}

Когда я пытаюсь запустить тесты через Test, Run, All Tests In Solution, я получаю следующее в строке состояния VS2008:

Никакие тесты не выполняются, потому что тесты не загружены или выбранные тесты не работают.

Тест, Windows, Test View не показывает никаких тестов.

Примечание. Я создал тесты вручную (работает для xUnit.net) вместо использования мастеров Microsoft.

Я сравнил свою созданную вручную настройку MSTest с настройкой другого теста, который я сгенерировал с помощью мастера, и они выглядят достаточно похожими.

Вопрос: Каковы наиболее вероятные причины сообщения об ошибке выше?

Изменить 2010-02-25: Дополнительная информация:
Я щелкнул правой кнопкой мыши папку Элементы решения и выберите "Добавить", "Создать проект", "Тип тестовых проектов", "Тестируемые документы:: Шаблон проекта Visual Studio".

Новый проект по умолчанию ничего не делает, тест "TestMethod1" был обнаружен и передан.
Однако мой тест не появился... поэтому я скопировал и вложил свой тестовый метод в тестовый тестовый проект по умолчанию "TestProject1".

Мой тест был обнаружен в "TestProject", но не в исходном месте.

Я внимательно сравнивал файлы, организацию и настройки "TestProject1" с моим созданным вручную тестовым проектом.

На этом этапе я предполагаю, что некоторые настройки создаются с помощью шаблона проекта Visual Studio Test Project, который нелегко обнаружить.

imo, так же легко создать тестовый проект вручную, как создать его с помощью шаблона тестового проекта Visual Studio.

Обратите внимание: я не говорю, что я против использования шаблона проекта Visual Studio Test; для меня, мне нравится понимать, что за занавеской, так как это делает меня imho намного лучшим программистом.

Ответ 1

Еще один для гуглеров - эта проблема оказалась моей проблемой, и это смущало меня. Убедитесь, что ваш тестовый проект настроен на создание любой конфигурации решения, которое вы используете. Если тестовая сборка не строится, VS не сможет найти какие-либо тесты в несуществующей сборке, и вы на мгновение ударяете головой о стену: -)

Ответ 2

Возможно, немного поздно, но этот вопрос идет хорошо, я подумал, что брошу крохи для будущих гуглеров.

Брайан Кук предлагает проверить ProjectTypeGuids в своем сообщении в блоге о Вручную создать тестовый проект MS. По-видимому, вам нужны магические GUID {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} для С# и {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} для VB. См. Его сообщение в блоге для более подробной информации.

Если сообщение в блоге когда-либо уходит, вам нужно добавить следующий элемент в основную группу свойств в файле csproj:

<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

Ответ 3

Еще одна идея для гуглеров. Моя проблема заключалась в том, чтобы снова запустить проигнорированные тесты. Такое же сообщение об ошибке MS появляется, если вы удаляете метку Ignore. Не активирует автоматическое повторное включение теста. В этой статье вы пройдете последний шаг. http://richallen.blogspot.com/2008/05/ms-test-re-enabling-ignored-tests.html

Ответ 4

Исправление является простым, хотя оно не должно быть необходимым, если Visual Studio работает так, как должно.

Подводя итог тому, что внесли другие, особенно в этой статье, вот что в конечном итоге сработало для меня:

  • Используйте Configuration Manager, чтобы убедиться, что ваш тестовый проект выбран для построения любой конфигурации и платформы, которые вы используете (например: configuration = Debug и platform = x86).
  • Убедитесь, что ваш метод принадлежит [TestClass] и что он помечен как [TestMethod], а НЕ использует атрибут [Ignore]
  • Используйте тестовый вид, чтобы найти свой тест. Test View
  • Откройте окно "Свойства" (F4) и убедитесь, что ваш тест включен Enabled

Ответ 5

Оригинальный плакат сделал это, но я приехал сюда после того, как не сделал этого:

Убедитесь, что [TestClass] объявлен вверху, открытый в области:

namespace XYZ.API.Repository.Tests
{
    [TestClass()]
    public class ClientTests
    {

Ответ 6

Я только что сделал это вручную:

Создал новый проект библиотеки классов С# со следующим кодом:

namespace SO_Answer
{
    public class Class1
    {
        public void Test()
        {
            var k = "Hello";
        }
    }
}

Сохраненный проект, а затем перешел в "Файл- > Добавить- > Новый проект" и выбрал "Test Project". После того как VS создал проект unit test, я добавил ссылку на проект библиотеки классов, который я создал ранее.

В моем тесте у меня есть этот код:

namespace Unit_Test
{
    /// <summary>
    /// Summary description for UnitTest1
    /// </summary>
    [TestClass]
    public class UnitTest1
    {
        /// <summary>
        ///Gets or sets the test context which provides
        ///information about and functionality for the current test run.
        ///</summary>
        public TestContext TestContext { get; set; }

        #region Additional test attributes

        // You can use the following additional attributes as you write your tests:
        // Use ClassInitialize to run code before running the first test in the class
        // [ClassInitialize()]
        // public static void MyClassInitialize(TestContext testContext) { }
        // Use ClassCleanup to run code after all tests in a class have run
        // [ClassCleanup()]
        // public static void MyClassCleanup() { }
        // Use TestInitialize to run code before running each test 
        // [TestInitialize()]
        // public void MyTestInitialize() { }
        // Use TestCleanup to run code after each test has run
        // [TestCleanup()]
        // public void MyTestCleanup() { }
        #endregion

        /// <summary>
        /// The test method 1.
        /// </summary>
        [TestMethod]
        public void TestMethod1()
        {
            var f = new Class1();

        }
    }
}

Единственный добавленный мной код - это оператор using и оператор var f = new Class1();. Посмотрев на бегуна MSTest, я вижу TestMethod1.

Я не могу придумать, почему ваши модульные тесты не собираются. Единственное, что у меня было, это то, что я использовал бегун MSTest, чтобы попытаться проверить тесты NUnit по ошибке. Попробуйте начать с нуля.

Ответ 7

Я получал одно и то же сообщение, и оказалось, что у меня был проект unit test на сетевом диске. Как только я переместил его локально, все получилось отлично. Просто попробуйте, если вы получите эту ошибку. Джон

Ответ 8

Это может быть другой причиной. Проверьте, работает ли решение на 64-битной версии. Если это так, измените его на x86.

Ответ 9

Это должно быть ошибкой и является абсолютной болью, особенно в том случае, если вам необходимо повторно использовать каждый отдельный метод тестирования. Однако небольшое боковое мышление создало лучшее решение - переименовать тестовый класс и перестроить. Затем переименуйте его обратно. Кажется, работает. Ойп - нет. Переименование класса работает, но когда оно переименовано, оно возвращается к исходным настройкам. Хитрость заключается в том, чтобы закрыть Visual Studio и удалить файл метаданных test.wsmdi(visual studio test meta data). Это будет регенерировано.

Ответ 10

Когда вы сталкиваетесь с этой проблемой, в Visual Studio вам необходимо создать тестовый проект. 1. Выберите "Тест на панели инструментов" и выберите "Новый тест". Создайте свой проект и в этот момент создайте свой тестовый метод. Он должен работать после этого момента.

Ответ 11

Для потомков: я только обнаружил, что тесты на маркировку как статические заставили их молча войти в список тестов. По-видимому, это запрещено.

Ответ 12

Ни один из других ответов не работал у меня. Я продолжал получать следующее сообщение в окне вывода:

------ Discover test started ------
========== Discover test finished: 2 found (0:00:00.1310428) ==========
No tests found to run.

В моем случае проблема возникла только после того, как я создал новую конфигурацию с именем 0-Local. Мне пришлось добавить <DebugSymbols>true</DebugSymbols в соответствующий раздел моего файла csproj, поэтому он выглядит так:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == '0-Local|AnyCPU'">
  <DebugSymbols>true</DebugSymbols>
  <OutputPath>bin\0-Local\</OutputPath>
</PropertyGroup>

Ответ 13

У вас есть файл VSMDI в вашем решении? Я считаю, что этот файл требуется (НЕ ПРОВЕРЕН).

Ответ 14

Это типичная проблема, с которой я столкнулся. но самое простое решение, за которым я последовал, как свое... просто построить проект один раз и перестроить его снова. так что вы можете его решить.

Ответ 15

Если бы эта же проблема, кроме чтения предыдущих ответов, все выглядело хорошо.

В моем случае я только что запустил набор тестов, сделал небольшое изменение, построил решение и попытался запустить тест. Нет. Я пытался построить еще пару раз и искать проблемы, которые пробовали другие люди. Все еще нет.

Я попал в один из моих тестовых методов, чтобы добавить новый и нажать F6, чтобы построить решение, и нажал Run Unit Tests.

Бинго! Все прошло гладко.

Ответ 16

Такая же проблема, другая причина...

TestContext ДОЛЖЕН - общедоступная переменная.

Ответ 17

Я использовал метод public TestContext TestContext для записи на тестовый вывод и изменил область действия на private. Это сделало каждый тест непонятным. Сменили его на public.

Ответ 18

Еще один для гуглеров, использующих NUnit, особенно тех, кто перенес из MS Unit test в NUnit. Удалите тип проекта Гиды, которые идентифицируют проект как проект MS Test из файла проекта.

<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

Ответ 19

Если ваш код CLI (управляемый С++) и ваш тестовый класс наследуется от абстрактного базового класса, убедитесь, что ваш тестовый класс реализует базовый чистый виртуальный метод. если вы его не реализовали, вы можете увидеть сообщение "no tests found to run".