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

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

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:

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

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

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

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

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

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

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

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

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

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

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

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


person gerryLowry    schedule 22.02.2010    source источник
comment
Я признателен за участие и предложения в ответах и ​​комментариях ниже; Если у меня есть выбор, xUnit.net (Джим Ньюкирк, Брэд Уилсон) является моей предпочтительной средой для модульного тестирования. Я думаю, проблема заключалась в том, что MSTest мог быть в том, что MSTest создавал слишком много файлов, и их удаление могло решить проблему. Я говорю, что возможно, потому что не могу вспомнить. В то время я исследовал фреймворки для модульного тестирования .NET. Этот проект сейчас лежит у меня на заднем сиденье. Я постараюсь вернуться к этому в будущем. Спасибо вам всем. Я вернусь. г.   -  person gerryLowry    schedule 13.02.2011


Ответы (18)


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

person Dan F    schedule 17.06.2010
comment
ты прав. Вам нужно убедиться, что сборка строится. В моем случае эта ошибка возникла из-за комбинации следующего: (a) в Configuration Manager кнопка сборки не была отмечена (b) для всех других сборок было установлено значение x32, для этого было установлено значение Any CPU in the Configuration Manager (c) он жаловался, что ему нужна подписанная сборка, поэтому мне нужно было установить это в свойствах проекта. - person Contango; 07.10.2010
comment
Ха-ха! Классика - это меня тоже поразило. - person Paul Suart; 19.04.2011
comment
Спасибо. Проверял настройки хоста и сбивал vsmdi, но это помогло мне. - person RandomEngy; 08.05.2011
comment
Хех, спасибо за это. Получил и меня - так просто! Другое дело, почему его поставили не строить ... - person Grokys; 30.06.2011
comment
вырезанная паста вновь созданного тестового проекта, по-видимому, удаляет его из сборки и эту проблему :( - person Ankush; 20.01.2012
comment
Вау, я просто потратил час своей жизни на устранение этой неполадки. Дох! - person dan9298; 11.05.2013
comment
потрясающе, вот оно что! - person Ioana Marcu; 21.05.2014

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

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

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

<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
person Dan F    schedule 17.06.2010
comment
Сработало как шарм - офигенно. - person Steve Dignan; 13.07.2011
comment
Мне пришлось вручную добавить эту строку в файл csproj. ‹ProjectTypeGuids› {3AC096D0-A1C2-E12C-1390-A8335801FDAB}; {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} ‹/ProjectTypeGuids› - person granadaCoder; 11.02.2014

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

person Joy Petko    schedule 11.03.2011
comment
бафф ... спасибо, чувак, я собирался выбросить компьютер в окно. Надеюсь, это будет исправлено в Visual Studio 2083. - person vtortola; 23.01.2013

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

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

  • Используйте Configuration Manager, чтобы убедиться, что ваш тестовый проект выбран для сборки на любой конфигурации и платформе, которые вы используете (например, конфигурация = Debug и платформа = x86)
  • Убедитесь, что ваш метод принадлежит [TestClass] и помечен как [TestMethod], а НЕ использует атрибут [Ignore]
  • Используйте Test View, чтобы найти свой тест. Тестовый просмотр
  • Откройте окно свойств (F4) и убедитесь, что ваш тест включен Enabled
person Gustavo Mori    schedule 16.07.2012
comment
Не очевидно, что вы можете добавить новый тестовый проект в решение VS, нажать F6, чтобы построить его, но он не построен, потому что он не является частью конфигурации ... затем вы переходите к редактору списка тестов и дергаете себя на 30 минут гадаю, почему не появляются тесты! Спасибо Густаво. - person Ian; 29.09.2014
comment
Полностью! Я бы хотел, чтобы пользовательский интерфейс давал вам какое-то указание на то, что данный проект не создан для данной конфигурации - вроде как это выглядит, когда у вас есть макросы C ++, которые отображаются серым цветом, когда они не активны. - person Gustavo Mori; 29.09.2014

На оригинальном плакате это было сделано, но я прибыл сюда после того, как не сделал этого:

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

namespace XYZ.API.Repository.Tests
{
    [TestClass()]
    public class ClientTests
    {
person Dracorat    schedule 20.05.2014

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

person John Vetter    schedule 03.05.2011

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

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

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

Сохраните проект, затем перейдите в «Файл-> Добавить-> Новый проект» и выберите «Тестовый проект». После того, как VS создала проект модульного теста, я добавил ссылку на проект библиотеки классов, который я создал ранее.

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

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 по ошибке. Попробуйте начать с нуля.

person Jason Evans    schedule 22.02.2010
comment
Ты гений. Проблема заключалась в добавлении неправильного типа решения (библиотека классов вместо теста). - person ashes999; 14.11.2011

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

person T Jose    schedule 16.11.2011

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

person Dave    schedule 28.04.2011

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

person Marvin Bland    schedule 15.09.2011

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

person Jac    schedule 18.11.2013

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

------ 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>
person Big McLargeHuge    schedule 30.07.2015

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

person smaclell    schedule 22.02.2010
comment
Файл .vsmdi не требуется. Как описано выше в моем редактировании, я создал тестовый проект с шаблоном vs и увидел тест по умолчанию. После того, как я удалил ВСЕ файлы .vsmdi, тесты в проекте, созданном с помощью этого шаблона, все еще выполняются. Пытаюсь понять, какие специальные настройки делает шаблон. Это неприятно, потому что с xUnit.net так легко вручную создать тестовый проект. Благодарим за ваше предложение. - person gerryLowry; 25.02.2010
comment
Не беспокойся. Мне пришлось использовать MS Test на моих последних нескольких работах, и я обнаружил, что его зависимость от файла VSMDI вызывает огромную боль. Еще хуже было с некоторыми поставщиками системы контроля версий. Удачи. - person smaclell; 26.02.2010
comment
По какой-то причине в моем решении VS2008 было 2 файла VSMDI. Раньше он работал нормально, но не более того :( Итак, я закрыл VS, удалил файлы VSMDI, снова открыл решение и запустил все тесты в решении. Это показало ошибку, но, похоже, воссоздал новый VSMDI. Затем запустил все тесты в решении снова начал работать. - person demoncodemonkey; 27.11.2012

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

person pradip Kr Sen    schedule 20.01.2011

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

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

Я нажимаю Enter в одном из моих методов тестирования, чтобы добавить новый, нажимаю F6, чтобы построить решение, и нажимаю «Запустить модульные тесты».

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

person Tony DiTola    schedule 05.07.2013

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

person r3verse    schedule 07.10.2016

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

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

Если ваш код - это интерфейс командной строки (управляемый c ++), а ваш тестовый класс наследуется от абстрактного базового класса, убедитесь, что ваш тестовый класс реализует чистый виртуальный метод базы. если вы его не реализовали, вы можете увидеть сообщение «Не найдено тестов для запуска».

person Ron.A    schedule 21.03.2017