Как узнать, какой тестовый блок проверяет какие строки кода? - PullRequest
11 голосов
/ 21 июня 2011

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

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

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

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

Ответы [ 8 ]

3 голосов
/ 05 сентября 2011

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

1 голос
/ 27 июня 2011

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

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

0 голосов
/ 22 июня 2011

Простой ответ: «Запустите каждый тест отдельно и соберите данные о тестовом покрытии для этого теста».

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

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

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

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

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

0 голосов
/ 22 июня 2011

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

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

0 голосов
/ 21 июня 2011

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

0 голосов
/ 21 июня 2011

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

0 голосов
/ 21 июня 2011

Вы ищете термин «Покрытие кода».

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

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

при наличии других тестов, генерирующих исключения, вы можете отключить опцию прерывания при исключении:

  • В Visual Studio в меню перейдите в «Отладка» -> «Исключения» и снимите флажок на исключениях. тогда вам не нужно останавливаться на каждом исключении.
0 голосов
/ 21 июня 2011

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

...