C++ Boost测试库cpp无法编译

dwbf0jvd  于 2023-05-02  发布在  其他
关注(0)|答案(1)|浏览(113)

我在Linux上工作- Ubuntu
我有个测试cpp文件位于tests文件夹中:

#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE MyTest
#include <boost/test/included/unit_test.hpp>

#include "../src/myFunctions.h"

BOOST_AUTO_TEST_CASE(my_test_1){

    myNamespace::someFunction("abc", 2);

}

myFunctionssrc中的h是这样定义的:

#pragma once
#include <string>
namespace myNamespace{

   void someFunction(std::string a, int b);

}

myFunctionssrc中的cpp也是这样定义的:

#include "myFunctions.h"

namespace myNamespace{

   void myFunction(std::string a, int b){

     //does smth...
   }

}

现在我也有主。cpp在同一个文件夹- src中:

#include "myFunctions.h"

int main(int argc, char** argv){

   myNamespace::someFunction("a", 2);
   return 0;

}

所以有两个文件夹src和tests。在测试中有测试。cpp和src中的这3个其他文件。现在当我运行main时。cpp一切正常。但当我运行测试。cpp在测试cd中时也是如此:

g++ test.cpp

我得到以下错误:对'myNamespace::someFunction(...
所以它不知道这个函数?为什么会这样
如果我做测试的话。cpp删除函数调用后,我做smth像:BOOST_CHECK(10 == 12);然后它工作
可能:
有没有办法进行测试。cpp从myFunctions中的函数。cpp或main。cpp-基本上从文件test/test执行测试。cpp但是当我运行main的时候。使用myFunctions的cpp。cpp?

vfwfrxfs

vfwfrxfs1#

您在实现中将someFunction拼写为myFunction。修复了最小工作CMake(download as zip

  • 文件CMakeLists.txt
cmake_minimum_required(VERSION 3.22)
project(sotest)

add_subdirectory(src)
add_subdirectory(tests)
  • 文件src/CMakeLists.txt
add_library(mylib OBJECT myFunctions.cpp)
add_executable(main main.cpp)
target_link_libraries(main mylib)
  • 文件src/main.cpp
#include "myFunctions.h"

int main() {
    myNamespace::someFunction("a", 2);
}
  • 文件src/myFunctions.cpp
#include "myFunctions.h"

namespace myNamespace {
    void someFunction(std::string a, int b) {
        // does smth...
    }
} // namespace myNamespace
  • 文件src/myFunctions.h
#pragma once
#include <string>
namespace myNamespace {
    void someFunction(std::string a, int b);
}
  • 文件tests/CMakeLists.txt
add_executable(testrunner test.cpp)
target_link_libraries(testrunner mylib)
  • 文件tests/test.cpp
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE MyTest
#include "../src/myFunctions.h"
#include <boost/test/included/unit_test.hpp>

BOOST_AUTO_TEST_CASE(my_test_1) {
    myNamespace::someFunction("abc", 2);
    BOOST_CHECK(10 == 12);
}

其运行:

相关问题