Модульное тестирование кода C в Visual Studio 2017 с собственным проектом модульного тестирования - PullRequest
0 голосов
/ 07 июня 2018

Я хочу провести модульные тесты для C-проекта в Visul Studio 2017. Это встроенный проект lib.Я хочу сделать как можно меньше изменений в lib.Просто скомпилируйте c код в VS. Я добавил немного #ifdef WIN32.Это нормально для добавления еще.

Начинается с использования проекта Visual C ++ Native Unit Test.Но возникают проблемы, когда требуется проверить частные статические функции из файлов C и ввести значения varibales в проект.

  1. Включить мой встроенный проект в качестве статической библиотеки в решение VS.(или следует использовать библиотеку Dynamic-Link или что-то еще?)
  2. Создан собственный проект модульного тестирования и ему присвоено имя UnitTest1 .
  3. В UnitTest1 добавлена ​​эта строка какЯ понимаю, что это будет включать в себя мой lib, который хочет проверить.#pragma comment(lib, "../Release/Embedded.lib")
  4. Во встроенном файле заголовка кода я добавил этот макрос для создания библиотеки, в которой я буду выполнять предварительный тест.

    #pragma once<li>
    <code>#ifdef EXPORT_TEST_FUNCTIONS</code>
    <code>#define UNITTEST_Embedded_EXPORT __declspec(dllexport)</code>
    <code>#else</code>
    <code>#define UNITTEST_Embedded_EXPORT</code>
    <code>#endif</code><li>
    
    inline UNITTEST_ZAP_EXPORT static bool isActiv(void);
  5. Во встроенный файл C я добавил эту строку #define EXPORT_TEST_FUNCTIONS и эту функцию:

UNITTEST_ZAP_EXPORT static bool isActiv();
{
    return false;
}
Но когда я собираю UnitTest1 получаю ошибку LNK2001.

Очень неуверен, как действовать, чтобы это работало.Кто-нибудь, кто может направить меня через мою проблему?Я хотел бы иметь возможность проверить все функции в коде C.Надеюсь, это не трудно понять, что хотите получить помощь.Я только разработал пару лет.

1 Ответ

0 голосов
/ 13 июня 2018

У меня та же проблема, что и у вас.Вам нужно объяснить компилятору C ++ в Visual Studio, что заголовок C появляется, когда вы включаете объявление для функции C.Поэтому ваш UnitTest1.cpp должен начинаться с:

extern "C" {
#include "somecode.h"
}

static_lib1.h должен содержать что-то вроде:

 #ifndef STATIC_LIB1_H_
 #define STATIC_LIB1_H_

 SWord doSomeThing();

 #endif

Удалите все лишние коды, которые были добавлены в ваши h и c-файлы длямодульный тест не должен быть нужен.Лучший модульный тест - это когда не вносите никаких изменений в код, который вы тестируете, потому что он нужен.

Я уверен, что это должно решить вашу проблему.

...