Я использую VS2005 VC ++ для неуправляемого C ++. У меня есть VSTS, и я пытаюсь использовать инструмент покрытия кода, чтобы выполнить две вещи в отношении модульных тестов:
- Посмотрите, какая часть моего тестируемого кода выполняется
- Посмотрите, сколько методов моего тестируемого кода (если таковые имеются) вообще не тестируются модулем
Настройка инструмента покрытия кода VSTS (см. текст ссылки ) и выполнение задачи № 1 были простыми. Однако № 2 стал для меня неожиданным испытанием. Вот мой тестовый код.
class CodeCoverageTarget
{
public:
std::string ThisMethodRuns() {
return "Running";
}
std::string ThisMethodDoesNotRun() {
return "Not Running";
}
};
#include <iostream>
#include "CodeCoverageTarget.h"
using namespace std;
int main()
{
CodeCoverageTarget cct;
cout<<cct.ThisMethodRuns()<<endl;
}
Когда оба метода определены в классе, как указано выше, компилятор автоматически удаляет ThisMethodDoesNotRun () из файла obj. Если я перенесу его определение за пределы класса, то оно будет включено в файл obj, и инструмент покрытия кода покажет, что он вообще не использовался. В большинстве случаев я хочу, чтобы компилятор сделал это исключение для меня, но для инструмента покрытия кода он побеждает значительную часть значения (например, поиск непроверенных методов). Я попробовал несколько вещей, чтобы сказать компилятору перестать быть умным для меня и компилировать все, но я в тупике. Было бы неплохо, если бы средство покрытия кода компенсировало это (я полагаю, сканируя исходный код и сопоставляя его с выходными данными компоновщика), но я не нашел ничего, что могло бы предложить, чтобы он включал специальный режим. Я полностью упускаю что-то простое здесь или это невозможно с помощью компилятора VC ++ + инструмента покрытия кода VSTS?
Заранее спасибо,
КГБ