Google Test для встроенных систем - PullRequest
0 голосов
/ 05 марта 2020

Я хотел бы написать модульные тесты для моего встроенного прикладного программного обеспечения, используя Google Tests.

Эти тесты будут выполняться на прикладном программном обеспечении, написанном на C ++. Драйверы, используемые прикладным программным обеспечением (например, I2C, SPI), утверждение о неисправности записано в C. Мои вопросы будут:

  1. Что было бы хорошим началом? Я имею в виду ресурсы, которые я мог бы прочитать, чтобы узнать больше об использовании Google Test во встроенной среде.
  2. Как мне go насмехаться над моими файлами драйверов? Например, если у меня есть функция void read(uint8_t address) в моей библиотеке I2 C, как мне go насчет насмешки над этой функцией, чтобы эта конкретная функция вызывалась в моем классе C ++?
  3. Эти файлы драйверов, записанные в C, также включены в мои файлы C ++. Я попытался скомпилировать пустой тестовый файл, включая только мой заголовок класса C ++, и у меня были проблемы с компиляцией, так как компилятор не мог найти заголовок драйвера. Как можно избежать этой проблемы?
  4. Управление ошибочными утверждениями с помощью кода - Неудачные утверждения в моей библиотеке драйверов, требующие сброса системы. Как я могу подражать этому в тестах?

1 Ответ

1 голос
/ 06 марта 2020
  1. Я не знаю каких-либо конкретных ресурсов для использования Gtest для целевых тестов с использованием неизолированного металла, но для начала лучше всего прочитать Gtest Primer и, в зависимости от вашей архитектуры программного обеспечения, возможно, даже документация Gmock . Последнее может оказаться полезным при тестировании соответствующих классов приложений, а не только драйверов низкого уровня.
  2. Для этого есть несколько вариантов. Самый распространенный вариант, который я видел до сих пор, - это две разные реализации для цели и платформы, на которой выполняются тесты. Например, у вас может быть два файла

    • ic2. c
    • i2c_x86. cpp

      И в зависимости от того, выполняете ли вы в данный момент компиляцию для цели или тестовую платформу, в которой вы используете одну из них.

    Другой вариант - поднять реализацию C до C ++ и написать оболочку класса вокруг вашего драйвера. Это позволит вам воспользоваться возможностями C ++ и использовать такие вещи, как внедрение зависимостей, наследование, CRTP и т. Д. ...

  3. Не уверен, что я понимаю, о чем вы просите.

  4. В Gtest есть тест ASSERT_DEATH, например, моя текущая база кода содержит следующий тест

      // 2 byte message does not fit 14bit, assertion triggered
      ASSERT_DEATH(encode_datagram(make_datagram(0, 64, 0)), ".*");
...