Я думаю, главный вопрос сейчас, вы тестирование, что ваш код или компилятор в данный момент?
Тестирование компилятора не обязательно является плохим ... У меня в прошлом были ошибки маскировки компилятора, поэтому было бы неплохо убедиться, что вы получаете тот же набор проверок безопасности, которые вы ожидаете.
Однако вам нужно будет сделать много работы. Ваш юнит-тест должен будет вызвать компилятор, захватить его вывод и проанализировать его для правильной инструкции ошибки на правильной строке. Это не тривиально, и, возможно, этого не стоит.
Менее легкий подход может заключаться в том, чтобы сохранить каталог с неправильным кодом и иметь скрипт для каждого файла по одному за раз. У вас есть флаг #ifdef MAKEFAIL, который включает точное условие, которое должно завершиться неудачей. Убедитесь, что компилятор возвращает 0, когда вы не устанавливаете этот флаг, и при отсутствии ненулевого значения. Это предполагает, что компилятор возвращает ненулевое значение при ошибке ... Я не знаю, следует ли MSVC следовать этому правилу.
Третий вариант, который я выбрал там, чтобы адресовать переносимость, является autoconf. Это может быть болью для настройки, но часть ее цели заключалась в том, чтобы обеспечить компромиссную среду разработки. Вы можете добавить в него такой тест, и он позволит обрабатывать поиск компилятора и его попытки.
Хороший вопрос. Я уже задавался вопросом об этом раньше. Тем не менее, я действительно не нашел хороших ответов.Конечно, вы можете написать сценарий, который пытается скомпилировать файл, и проверяет код ошибки или что-то в этом роде, но вряд ли это изящное решение. – jalf