powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / "unresolved external symbol" в юнит тестах под MVS Ultimate 2012
7 сообщений из 7, страница 1 из 1
"unresolved external symbol" в юнит тестах под MVS Ultimate 2012
    #38136470
HellFighter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ни когда раньше юнит тесты не писал, вот решил научиться. Написал пустой класс:

UsefullClass.h
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#pragma once
class UsefullClass
{
public:
	UsefullClass(void);
	~UsefullClass(void);

	int usefullMethod(int param);

};



UsefullClass.cpp
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#include "UsefullClass.h"


UsefullClass::UsefullClass(void)
{
}


UsefullClass::~UsefullClass(void)
{
}

int UsefullClass::usefullMethod( int param )
{
	return param*5;
}



В том же солюшене создаю проект юнит теста (Native Unit Test Project). К этому проекту добавляю путь к хедеру описанного выше класса, прописываю
Код: plaintext
1.
#include "UsefullClass.h"

.
Добавляю к проекту юнит теста "ссылку"(reference) на проект с описанным выше классом.
Код в файле юнит теста:
Код: plaintext
1.
2.
3.
4.
		TEST_METHOD(TestUsefullMethod)
		{
			Assert::AreEqual(25, 25);
		}


В итоге проект с классом компилится, проект с юнит тестом тоже.

Добавляю вызов своего класса в тесте:
Код: plaintext
1.
2.
3.
4.
5.
		TEST_METHOD(TestUsefullMethod)
		{
			UsefullClass item;
			Assert::AreEqual(item.usefullMethod(5), 25);
		}



Всё, юнит тесты не компилятся:
1>Link:
1> Creating library c:\Users\HellFighter\Documents\Visual Studio 2012\Projects\Project1\Debug\UnitTest.lib and object c:\Users\HellFighter\Documents\Visual Studio 2012\Projects\Project1\Debug\UnitTest.exp
1>unittest1.obj : error LNK2019: unresolved external symbol "public: __thiscall UsefullClass::UsefullClass(void)" (??0UsefullClass@@QAE@XZ) referenced in function "public: void __thiscall UnitTest::UnitTest1::TestUsefullMethod(void)" (?TestUsefullMethod@UnitTest1@UnitTest@@QAEXXZ)
1>unittest1.obj : error LNK2019: unresolved external symbol "public: __thiscall UsefullClass::~UsefullClass(void)" (??1UsefullClass@@QAE@XZ) referenced in function "public: void __thiscall UnitTest::UnitTest1::TestUsefullMethod(void)" (?TestUsefullMethod@UnitTest1@UnitTest@@QAEXXZ)
1>unittest1.obj : error LNK2019: unresolved external symbol "public: int __thiscall UsefullClass::usefullMethod(int)" (?usefullMethod@UsefullClass@@QAEHH@Z) referenced in function "public: void __thiscall UnitTest::UnitTest1::TestUsefullMethod(void)" (?TestUsefullMethod@UnitTest1@UnitTest@@QAEXXZ)
1>c:\Users\HellFighter\Documents\Visual Studio 2012\Projects\Project1\Debug\UnitTest.dll : fatal error LNK1120: 3 unresolved externals

Судя по тому что написано проект тестов не видит имплементации методов вызываемого класса. Переносишь имплементацию в .h файл - всё естественно начинает работать как надо.

Кстати пробовал убрать reference на проект с классом - ничего не меняется, те похоже это изначально не работает.

Как решается данная проблема, без переноса имплементации в хедер?
(Гуглил, ничего толкового не нашёл)
...
Рейтинг: 0 / 0
"unresolved external symbol" в юнит тестах под MVS Ultimate 2012
    #38136502
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HellFighter,


Добавляю к проекту юнит теста "ссылку"(reference) на проект с описанным выше классом.


Что это значит?
...
Рейтинг: 0 / 0
"unresolved external symbol" в юнит тестах под MVS Ultimate 2012
    #38136540
HellFighter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Правый клик по проекту -> References. В появившемся окне жму "Add New Reference" и там выбираю свой первый проект. Жму "ОК".
...
Рейтинг: 0 / 0
"unresolved external symbol" в юнит тестах под MVS Ultimate 2012
    #38137666
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HellFighterMasterZiv,

Правый клик по проекту -> References. В появившемся окне жму "Add New Reference" и там выбираю свой первый проект. Жму "ОК".

Я не знаю что это такое, но ты должен добавить при сборке проекта где тест библиотеку или объектный файл, где реализованы тестируемые классы.
...
Рейтинг: 0 / 0
"unresolved external symbol" в юнит тестах под MVS Ultimate 2012
    #38140084
HellFighter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

А можно по подробнее как это делается? Если бы писал DLL, то видимо как-то подключить lib файл (в этом случае #pragma comment ???), а если пишу исполняемый файл, то что и как подключать?

Или может знаете другой способ писать юнит тесты на C++ под MVS или RAD Studio??? А то я никогда не писал юнит тесты, но думаю что это было бы хорошей практикой.
...
Рейтинг: 0 / 0
"unresolved external symbol" в юнит тестах под MVS Ultimate 2012
    #38141361
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HellFighter,

Точно так же, dll или exe все равно.

Ты должен добавить библиотеку или объектный файл как параметр линкеру.
Как - не знаю в этой твоей студии, думаю, легко найти в нете.
...
Рейтинг: 0 / 0
"unresolved external symbol" в юнит тестах под MVS Ultimate 2012
    #38141371
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юнит тест тут вообще ни при чём, это такое же приложение, как и все остальные.
У тебя есть приложение, использующее твои классы? вот с него и копируй.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / "unresolved external symbol" в юнит тестах под MVS Ultimate 2012
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]