MSTest: тесты не выполняются, поскольку тесты не загружены или выбранные тесты отключены - PullRequest
61 голосов
/ 23 февраля 2010

У меня есть решение 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.

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

Ответы [ 18 ]

75 голосов
/ 17 июня 2010

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

45 голосов
/ 17 июня 2010

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

Брайан Кук предлагает проверить ProjectTypeGuids в своем блоге о Создание MS Test Project вручную . Очевидно, вам нужны магические 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>
10 голосов
/ 12 марта 2011

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

9 голосов
/ 16 июля 2012

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

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

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

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

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

namespace XYZ.API.Repository.Tests
{
    [TestClass()]
    public class ClientTests
    {
2 голосов
/ 23 февраля 2010

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

Создан новый проект библиотеки классов 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 Runner, чтобы попытаться просмотреть тесты NUnit по ошибке. Попробуйте начать с нуля.

2 голосов
/ 03 мая 2011

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

2 голосов
/ 16 ноября 2011

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

1 голос
/ 30 июля 2015

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

------ 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>
1 голос
/ 19 ноября 2013

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

...