Использование: MSTest / CppUnit / TFS2015 / VS2013 / C ++
Я отлаживаю тест, который работает нормально локально и не проходит на машине сборки (к которой у меня нет доступа). Этим утром я сел и получил почти все мои тесты, за исключением одного. Тест сравнивает две довольно большие строки и (обычно) очень полезную Assert failed. Expected:<...
никогда не добрался до Actual:<...
часть, потому что строка была слишком длинной. Это просто: Assert::AreEqual(expectedStr, actualStr);
,
Прямо сейчас мой обходной путь — записать файл в сетевой путь, к которому у меня есть доступ из теста (который, к счастью, уже является интеграционным тестом, но все же …). О — и я уже говорил, что мне нужно запустить сборку, которая займет 40 минут, даже если я установлю Clean Workspace
в None
в моих параметрах процесса сборки, чтобы даже запустить тест? Это совсем другой вопрос для другого поста = /.
Есть ли способ посмотреть на полные результаты неудачного утверждения теста (например, без обрезания сравнения строк)? Возможно, файл журнала тестового запуска?
Согласно вашему описанию, вы хотите выразить сообщения об ошибках утверждения в C ++. Проверьте этот чехол может помочь вам:
«Распространенным решением этой проблемы является создание макроса assert. этот вопрос. Окончательная форма их макроса в этом ответе была следующей:
#define dbgassert(EX,...) \
(void)((EX) || (realdbgassert (#EX, __FILE__, __LINE__, ## __VA_ARGS__),0))
В вашем случае realdbgassert
будет функция, которая печатает любую соответствующую информацию stderr
или другую консоль вывода, а затем вызывает саму функцию assert. В зависимости от того, сколько информации вы хотите, вы также можете сделать дамп стека, или зарегистрируйте любую другую соответствующую информацию, которая поможет вам определить проблему. Однако это может быть так же просто, как передача строки формата printf-esque и соответствующих значений параметров.
Обратите внимание, что если ваш компилятор не поддерживает вариационные макросы, вы можете создавать макросы, которые вместо этого принимают определенное количество параметров. Это немного более громоздко, но вариант, если вашему компилятору не хватает поддержки, например:
#define dbgassert0(EX) \ ...
#define dbgassert1(EX,p0) \ ...
#define dbgassert2(EX,p0,p1) \ ...
«
Других решений пока нет …