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

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

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

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

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

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

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

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

  • в визуальной студии в меню перейдите в раздел "Отладка" → "Исключения" и снимите флажок "Исключить исключения". то вам не нужно останавливаться при каждом исключении.

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

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

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

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

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

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