0

Изучаю темы по юнит тестированию на основе этого туториала https://www.bogotobogo.com/cplusplus/google_unit_test_gtest.php Несколько дней пытаюсь решить одну проблему (в C++ опыта мало; недельный поиск ничего не дал, либо я банально не увидел в ответах решения этой проблемы).

Суть: когда в самом коде юнит теста вызываю статическую функцию cubic() - т.е. все четко по туториалу - все отлично работает!!! НО. Затем я всего лишь создаю в главном проекте (в туториале это "simplemath") простой класс:

    // SimpleClass.h
    #pragma once
    class SimpleClass
    {
    public:
        SimpleClass();
        ~SimpleClass();
    };

    // SimpleClass.cpp
    #include "pch.h"
    #include "SimpleClass.h"

    SimpleClass::SimpleClass()
    {
    }

    SimpleClass::~SimpleClass()
    {
    }

И затем в юнит тесте (в туториале это отдельный проект в решении "unittest_SimpleMath") просто пытаюсь создать переменную этого класса:

    #include "pch.h"
    #include "gtest/gtest.h"
    #include "SimpleClass.h"

    TEST(testSimpleClass, mySimpleClass)
    {
        SimpleClass sc;
        EXPECT_EQ(1000, cubic(10));
    }

То получаю ошибку линковщика:

Ошибка LNK2019 ссылка на неразрешенный внешний символ "public: __thiscall SimpleClass::SimpleClass(void)" (??0SimpleClass@@QAE@XZ) в функции "private: virtual void __thiscall testSimpleClass_mySimpleClass_Test::TestBody(void)" (?TestBody@testSimpleClass_mySimpleClass_Test@@EAEXXZ) Unittest_MainApplication C:\PROJECTS\TEST\SimpleGoogleTest\MainApplication\Unittest_MainApplication\Unittest_SimpleClass.obj 1 Link

Что необходимо сделать, чтобы в юнит тесте можно было создавать экземпляры классов? Или это в принципе не возможно/или так делать неправильно?

  • "Затем я всего лишь создаю в главном проекте...". Ну так а файл SimpleClass.cpp вы в этот проект добавить не забыли? – AnT stands with Russia Sep 11 '19 at 14:28
  • Может я неправильно понимаю ваш вопрос. Но вот я объявляю в главном проекте переменную своего класса и запускаю приложение (приложение компилируется и выполняется в консоли) http://prntscr.com/p4sgd2 – Юрий Кобыляцкий Sep 11 '19 at 14:50
  • Однако стоит только объявить такую же переменную в юнит-тесте, получаем ошибки линковщика http://prntscr.com/p4sk7k – Юрий Кобыляцкий Sep 11 '19 at 14:55
  • А вот функцию cubic(10) юнит-тест корректно вызывает из главного проекта... в чем же разница? и что нужно сделать, чтобы можно было создать переменную кастомного класса? – Юрий Кобыляцкий Sep 11 '19 at 14:58

0 Answers0