Как получить доступ к моему коду с помощью Visual Studio CppUnitTestFramework - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу протестировать мой код.Это частный шаг в моей задаче, код которой я уже написал.

Я использую VS Community 2017 v.15.9.7.Я следовал инструкциям этого сайта до мельчайших подробностей, строка за строкой: https://blogs.msdn.microsoft.com/vcblog/2017/04/19/cpp-testing-in-visual-studio/#Setup

Но после всех включений я получаю две ошибки:

1) Ошибка LNK1120 1 неразрешенные внешние ошибки UnitTest1\ source \ repos \ Primes \ Debug \ UnitTest1.dll 1

2) Ошибка LNK2019: неразрешенный внешний символ "public: bool __thiscall SearchPrimes :: IsPrime (int)" (? IsPrime @ SearchPrimes @@ QAE_NH @ Z)ссылка в функции «public: void __thiscall UnitTest1 :: TestClass :: IsOdd (void)» (? IsOdd @ TestClass @ UnitTest1 @@ QAEXXZ) UnitTest1 C: \ Users \ Velzevoul \ source \ repos \ Primes \ UnitTest1 \ unittest1.obj

Я пробовал перемещать файлы, но, думаю, случайное перемещение их принесет больше вреда, чем пользы.Я читал о включении «stdafx.h» в мой «источник», но это усугубило ситуацию, так как появлялось больше ошибок.

Вот заголовочные файлы кода, который я написал:

#pragma once

#include <vector>
#include "XMLParser.h"

class SearchPrimes 
{

public:
    std::vector<int> RangePrime(const std::pair<int, int>&);     
    //Setting the range to search for prime numbers, executing the algorithm

    bool IsPrime(int);  //The algorithm that checks if a number is prime
    bool IsOdd(int);    //Checking if a number if even or odd

};


#pragma once

#include <iostream>
#include <vector>


class XMLParser
{

public:

    void removeTags(std::string&);  //Removing the brackets of the tags of the .xml


    std::string openFile(std::string);  //Opening a file
    std::vector<std::string> readFile(const std::string&, std::string); 
   //Getting the text from the .xml file to a vector

    std::vector<std::pair<int, int> > stringsToInts();  
   //Finding the values of the tags that contain the ranges
   //and converting the string numbers to a vector<int>
};  

Вот test.cpp

#include "stdafx.h"
#include "CppUnitTest.h"
#include "/Users/Velzevoul/source/repos/Primes/Primes/SearchPrimes.h"
#include "/Users/Velzevoul/source/repos/Primes/Primes/XMLParser.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace UnitTest1
{       
    TEST_CLASS(TestClass)
    {
    public:

        TEST_METHOD(IsOdd)
        {
            SearchPrimes prime;
            Assert::IsTrue(prime.IsPrime(4));
        }

    };
}

Что мне нужно сделать, чтобы решить внешние зависимости?В статье говорится, что как только я пойду по шагам, я могу начать.Тест находится в отдельном проекте, как предполагает статья.Если вы считаете, что проблема может быть связана с моей функцией main (), скажите, пожалуйста, включить ее.Я не сейчас, потому что это довольно долго.

Я благодарю вас за ваше время заранее!

1 Ответ

0 голосов
/ 24 марта 2019

В этой статье предполагается, что вы можете просто ссылаться на исполняемый файл Windows так же, как на DLL.Я полагаю, что это теоретически возможно, если ваш исполняемый файл настроен на экспорт своих функций, но это кажется странным.

Существует два варианта доступа к тестируемому коду в модульном тесте C ++.project:

  1. Добавьте исходные модули (.cpp / .h) в ваш проект модульного тестирования.
  2. Связь с библиотекой, содержащей код.

Если ваш проект относительно прост, всего с несколькими модулями .cpp, то вариант 1, вероятно, является подходящим вариантом.Щелкните правой кнопкой мыши свой проект модульного тестирования, выберите «Добавить -> Существующий элемент ...» и добавьте модули .cpp, которые вы хотите протестировать.

Для более сложного проекта со многими исходными модулями, вариант 2 может бытьлучший вариант.Создайте один или несколько библиотечных проектов (статических или динамических), которые будут содержать исходные модули, а затем свяжите с библиотекой как исполняемый, так и модульный проекты.

Хорошей практикой является создание одного проекта модульного тестирования для каждого проекта, чтобыбыть провереннымДайте проекту модульного теста имя, которое указывает, какой проект он тестирует, т.е. MyExecutable и MyExecutable.Test, MyLibrary и MyLibrary.Test и т. Д.

...