Привет ! Меня зовут Ксавье Жувено, и в этом небольшом посте мы увидим, как ожидать ошибки компиляции с помощью Azure Pipelines.

Самореклама: другие статьи можно найти на моем сайте

Проблемный

В большинстве случаев, когда разработчики взаимодействуют с Azure Pipelines и CI в целом, они хотят убедиться, что их программа компилируется, а их тесты проходят. Но, в зависимости от программы, которую вы создаете, или системы, которую вы устанавливаете, вы можете захотеть проверить, генерируется ли ошибка, когда должна быть сгенерирована одна ошибка.

Например, я столкнулся с этой проблемой, играя с инструментом cppcheck, и хотел убедиться, что смогу заставить его вызвать ошибку в небольшой программе. Для проведения такого теста нам доступно несколько решений: мы можем, например, создать скрипт или программу, которая будет проверять это поведение и ожидать ошибки. В этом случае этот скрипт будет таким же, как и любые другие тесты, и особых проблем у вас не возникнет. Создание такого скрипта займет некоторое время.

Другое решение, о котором идет речь в этой статье, заключается в том, чтобы иметь возможность ожидать ошибки непосредственно в CI, в данном случае в Azure Pipelines. 😉

Решение

Вот пример того, как ожидать ошибки на шаге Azure Pipeline:

steps:
  - bash: |
      cd build
      cmake --build .
      error_code=$?
      if [[ $error_code -eq 0 ]]; then
        exit 1
      fi
      exit 0

Давайте немного погрузимся в то, что здесь происходит! 😄

В этом фрагменте файла azure-pipeline.yml мы создаем шаг bash. На этом этапе мы компилируем проект с помощью CMake. Вы можете заметить, что технология не важна, я взял этот пример из проекта, где я использовал CMake, но вы можете заменить его любой командой, которая должна быть успешной.

После завершения операции мы получаем «результат» операции с помощью команды error_code=$? в переменной с именем error_code. В bash и shell при успешном выполнении команды предполагается возврат кода ошибки, равного 0; тогда как в случае сбоя он должен возвращать любое значение, кроме 0.

Наконец, мы смотрим на значение переменной error_code, чтобы проверить, не произошла ли ошибка во время компиляции. Если переменная оценивается как 0, то компиляция прошла успешно, и мы выходим из шага, возвращая значение 1, чтобы сделать шаг неудачным. С другой стороны, если переменная оценивается как 1, то компиляция завершится ошибкой, чего мы и ожидали, поэтому мы выходим из шага, возвращая значение 0, чтобы шаг завершился успешно.

И вот так, с помощью нескольких строк, мы можем ожидать ошибку на шаге Azure Pipelines. 😄

Примечание. Должен признаться, мне бы очень хотелось, чтобы поле is_error_expected было доступно. Это сделало бы это решение более элегантным, и его было бы легче воспроизвести в другом проекте. Надеюсь, когда-нибудь такая функция будет нам доступна 😉

Спасибо всем за чтение этой статьи, и до моей следующей статьи, есть великолепный день.

Интересные ссылки

Первоначально опубликовано на http://10xlearner.com 9 ноября 2020 г.