Как узнать, какой тестовый блок проверяет какие строки кода?

я дурачился вокруг Нюинта, надеясь найти способ понять, какая строка кода проходит в каком тесте.

представьте, что у меня есть метод, для которого у меня есть 3 теста. Есть ли способ узнать, какой тест проверяет, что строка кода?

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

Это может быть очень полезно при работе с т тесты...

8 ответов


JetBrains dotCover может помочь вам получить информацию, которую вы ищете. Оно интегрирует с бегуном испытания блока ReSharper и собирает данные по В-испытания. Вы можете видеть, какой код покрывается каждым конкретным тестом (с соответствующей подсветкой в VS). И что более интересно, для каждого фрагмента кода Вы можете получить список тестов, которые его покрывают и легко их перезапускают.

дополнительная информация доступна здесь: http://blogs.jetbrains.com/dotnet/2010/07/show-covering-test-with-dotcover/


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

однако это возможно, но потребует немного усилий, используя OpenCover. Если вы захватили и сохранили все точки последовательности из тестов и целей в порядке их поступления, а затем проанализировали эти результаты на тестовой основе, это одна из первоначальных целей OpenCover - https://github.com/sawilde/opencover/wiki. В настоящее время OpenCover просто агрегирует эти результаты, а затем выбрасывает данные посещения, но они могут быть сохранены. Конечно, вы должны знать о любых параллельных тестах, если они существуют. Объем данных может быть огромным и является одной из причин, по которым он еще не реализован.


можно отладка-тестирование. Если вы используете NUnit, вы можете прикрепить процесс к VS.


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


самый простой способ-загрузить и установить персональную версию TestDriven.NET который запускает модульные тесты и имеет возможность запускать и сообщать о покрытии кода с помощью NCover. Имейте в виду, что новые версии NCover являются коммерческими, но включены в TD.NET немного старше, но свободно использовать.


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

может быть косвенный способ достичь этого с помощью Visual Studio 2010 (Premium и Ultimate), который представил Испытания На Удар Анализатор. Это позволяет определить, на какие тесты влияют изменения исходного кода. Однако это работает только для MSTest. Вы можете использовать техника в нашем блоге чтобы ваши тесты NUnit запускались под MSTest.


термин, который вы ищете "покрытие кода".

У меня нет опыта, как это сделать с NUnit, но, похоже, есть проект codeplex, который делает это доступным для NUnit:http://codecoveragerunner.codeplex.com/

Если вы хотите увидеть, какой тест тестирует, какую строку кода Вы могли бы поставить точку останова в строке кода и отладить свои тесты? Когда вы нажмете точку останова, проверьте, какой тест

при наличии других тестов выбрасывание исключений вы можете отключить опцию break on exception:

  • в visual studio в меню перейдите в "отладка" - > "исключения" и снимите флажок перерыв на исключения. тогда вам не нужно останавливаться на каждом исключении.

простой ответ: "запустите каждый тест сам по себе и соберите данные тестового покрытия для этого теста".

Как вы организуете это может зависеть от конкретного инструмента покрытия тестов и как вы решите запустить свои тесты.

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

для вашей задачи вы хотите изменить код выполнения модульного теста, чтобы сделать явный вызов после каждого теста "TestCoverageDump", а затем "TestCoverageReset" (также вставлен), так что каждый тест получает свой собственный вектор. Как вы решите связать имя теста с вектором полностью под вашим контролем, по цене крошечной корректировки кода "TestCoverageDump", поставляемого в источник.

наш тестовый инструмент отображения покрытия может легко комбинировать все отдельные векторы, чтобы дать вам общее представление. Или вы можете просмотреть покрытие для любого конкретного вектора. Средство отображения также позвольте вам сравнить покрытие из разных тестов (где они пересекаются? как проверить, что другой нет?)

наличие этих данных покрытия для каждого теста также позволяет определить, какие тесты вам нужно запустить снова. Если вы измените код и повторно запустите instrumenter, он скажет вам, какие векторы тестового покрытия (например, какие тесты) необходимо запустить снова на основе того, какой измененный код, который ранее покрывал вектор.