我希望对我的代码进行单元测试。这是我已完成的任务的专有步骤。
我正在使用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无法解析的外部单元Test1 \ 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()函数有关,请告诉我包括该问题。我现在不在,因为它很长。
感谢您的宝贵时间!
答案 0 :(得分:0)
该文章建议您可以仅以与DLL相同的方式链接到Windows可执行文件。我认为,如果已将可执行文件设置为导出其功能,则从理论上讲是可行的,但这似乎很奇怪。
在C ++单元测试项目中,有两种方法可以访问被测代码:
如果您的项目相对简单,只有几个.cpp模块,那么选择方法1可能是可行的方法。右键单击您的单元测试项目,选择“添加->现有项...”,然后添加要测试的.cpp模块。
对于具有许多源模块的更复杂的项目,选项2可能是更好的选择。创建一个或多个库项目(静态或动态)以包含您的源模块,然后将可执行项目和单元测试项目与该库链接。
一种好的做法是为每个要测试的项目创建一个单元测试项目。给单元测试项目一个名称,以指示它正在测试的项目,即MyExecutable
和MyExecutable.Test
,MyLibrary
和MyLibrary.Test
等。