2009-07-10 3 views
7

Я использую Resharper 4.5 с тестированием Visual Studio 2008 и MBUnit, и, похоже, что-то странное с использованием ReSharpher для запуска тестов.Resharper работает все тесты, когда выбран только один.

На стороне есть значки рядом с классом каждый метод тестирования с параметрами Run and Debug. Когда я выбираю «Выполнить», он просто показывает мне результаты одного теста. Однако я заметил, что тест проходил довольно много времени.

Когда я запускал профилировщик Sql Server и начал переходить через код, я понял, что он не просто запускает выбранный тест, а каждый из них в классе. Есть ли какая-то причина, по которой он выглядит так, как будто он работает только на одном модульном тесте, а фактически запускает их все?

Его получение - это боль, ожидающая выполнения всех тестов интеграции, когда я только забочусь о повторном использовании одного из них, есть ли способ изменить это?

+0

Вы используете Gallio для запуска тестов MBUnit? –

+1

Какую версию Gallio вы используете? Более старые версии содержали ошибку, которая приводила к поведению, аналогичному тому, что вы описываете> –

+0

У меня установлен Gallio, но я не думаю, что использую его для запуска тестов. Я просто использую MBUnit exe. Как узнать, использует ли VS Gallio? Установленная версия 3.0.0.179. – Brandon

ответ

5

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

[TestMethod] 
    public void TestSomething() 

    [TestMethod] 
    public void TestSomethingPart2() 

Я видел, что запуск TestSomething() будет работать как, однако работает TestSomethingPart2() бы не. Я пришел к выводу, что если вы назовете методы, которые могут иметь точное соответствие для имени метода, он будет запускать тест. После переименования моего второго теста на TestPart2Something эта проблема исчезла.

+0

Это довольно интересно. Кто-нибудь еще подтвердил эту проблему? –

+1

Я заметил это поведение, хотя мои имена методов совершенно разные! –

+0

Кто бы ни опросил точку во времени, ответьте на конкретные версии технологии через 7 лет после того, как вопрос был задан ... вы просто глупы –

0

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

+0

Значок рядом с объявлением метода, который гласит: «(Имя метода)« Действительно »означает« Запустить весь класс »? Это кажется очень вводящим в заблуждение ... – Brandon

+0

Я не писал это, поэтому я не могу сказать. Сработало контекстное меню правой кнопки мыши? –

+1

Нет, его все еще запускают все, даже когда я нажимаю правой кнопкой мыши и говорю «Run Unit Tests». – Brandon

0

Текущий выпуск Gallio включает в себя блок тестирования с поддержкой MbUnit (и NUnit) встроенный.

Из меню Resharper у вас есть возможность запуска теста Single unit или всех тестов в вашем решении. Что это здорово, что клавиатура-ярлыки для этого являются:

  • Alt + R, U, R - Выполнить тест из текущего контекста (если вы на [Test] уровне, он запускает один тест, если вы на [TestFixture] уровне, он работает все в креплении)
  • Alt + R, U, N - запуск всех модульных тестов в вашем решении

Я настоятельно рекомендую вам удалить текущий Gallio, а затем проверьте C: \ Program Files \ Jetbrains \ Resharper \ plugins \ bin и очистите файлы и файлы там. Затем установите Gallio заново.

Как только вы это сделали, вы должны запустить VS2008 и перейти на Resharper | Plugins, чтобы проверить, что плагин Gallio активен. Это даст вам поддержку MbUnit.

3

Я надеюсь, что это появится под сообщением Криса.

У меня была подобная ситуация, которая подтверждает поведение, которое он заметил.

[TestMethod()] 
public void ArchiveAccountTest() 

[TestMethod()] 
public void ArchiveAccountTestRestore() 

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

Примечание: Я использую Resharper 5.1, так что это все еще проблема.

5

Я могу подтвердить, что это проблема с ReSharper 5.1.

Чтобы воспроизвести тест выполнения A из моего примера кода ниже (все тесты будут выполнены); запустить тест AB (все кроме A будут выполняться); и т. д .:

[TestMethod] 
public void A() 
{ 
    Console.WriteLine("A"); 
} 

[TestMethod] 
public void AB() 
{ 
    Console.WriteLine("AB"); 
} 

[TestMethod] 
public void ABC() 
{ 
    Console.WriteLine("ABC"); 
} 

[TestMethod] 
public void ABCD() 
{ 
    Console.WriteLine("ABCD"); 
} 

[TestMethod] 
public void ABCDE() 
{ 
    Console.WriteLine("ABCDE"); 
} 

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

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