我正在尝试使用 google test 和 CLion 运行一个简单的测试。我认为我已经正确设置了 cmake,并且能够“运行测试”。当我这样做时,它说没有找到测试。有任何想法吗? CMakeLists.txt
cmake_minimum_required(VERSION 3.7)
project(expirement)
find_package(Threads REQUIRED)
set(CMAKE_CXX_STANDARD 14)
set(SOURCE_FILES main.cpp getstring.cpp tests.cpp)
include(${CMAKE_ROOT}/Modules/ExternalProject.cmake)
ExternalProject_Add(googletest
SOURCE_DIR "/home/dcooke/googletest-master/googletest/"
)
ExternalProject_Get_Property(googletest source_dir)
include_directories(${source_dir}/include)
add_executable(expirement main.cpp getstring.cpp tests.cpp)
add_dependencies(expirement googletest)
target_link_libraries(expirement
/home/dcooke/BuildBinaries/lib/libgtest.a
/home/dcooke/BuildBinaries/lib/libgtest_main.a
)
target_link_libraries(expirement Threads::Threads)
enable_testing()
测试文件:
#include "getstring.h"
#include "gtest/gtest.h"
TEST(StringTest, CheckReturnValue) {
ASSERT_EQ("asdfasf",GetTheString());
}
命令行和结果:
/home/user/Code/expirement/cmake-build-debug/expirement --gtest_filter=StringTest.*:StringTest/*.*:*/StringTest.*/*:*/StringTest/*.* --gtest_color=no
Testing started at 10:18 AM ...
The String
Process finished with exit code 0
Empty test suite.
最佳答案
其他评论和回答建议你需要使用add_test()。如果您想使用 CMake 的 CTest 框架的便利性,您只需要使用 enable_testing() 和 add_test() 即可。如果您愿意,任何可执行文件都可以作为测试。让我们深入了解您的问题。
首先,简化。我假设您已经成功构建了 googletest,并且您知道如何使用它(如果没有,那是一个单独的问题。)减少您的 CMakeLists.txt。
CMakeLists.txt
cmake_minimum_required(VERSION 3.7)
project(expirement)
find_package(Threads REQUIRED)
set(CMAKE_CXX_STANDARD 14)
set(SOURCE_FILES main.cpp getstring.cpp tests.cpp)
include_directories($ENV{HOME}/googletest/googletest/include)
add_executable(expirement main.cpp getstring.cpp tests.cpp)
target_link_libraries(expirement
$ENV{HOME}/googletest/googlemock/gtest/libgtest.a
$ENV{HOME}/googletest/googlemock/gtest/libgtest_main.a
)
target_link_libraries(expirement Threads::Threads)
您会注意到我删除了 ExternalProject 位,您可以找出我将 googletest 放在哪里。
现在,由于我们没有您的源代码,我不得不模拟几个 stub 。
main.cpp
#include "gtest/gtest.h"
int main(int argc, char *argv[]) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
getstring.h
#include <string>
std::string GetTheString();
getstring.cpp
#include <string>
std::string GetTheString() {
return (std::string) "asdfasf";
}
现在,cmake 并构建:
~/foo
❯ cmake .
-- The C compiler identification is AppleClang 8.1.0.8020038
-- The CXX compiler identification is AppleClang 8.1.0.8020038
-- Check for working C compiler: /App
[ ... cmake output goes here. blah blah blah ... ]
-- Found Threads: TRUE
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/nega/foo
~/foo
❯ make
Scanning dependencies of target expirement
[ 25%] Building CXX object CMakeFiles/expirement.dir/main.cpp.o
[ 50%] Building CXX object CMakeFiles/expirement.dir/getstring.cpp.o
[ 75%] Building CXX object CMakeFiles/expirement.dir/tests.cpp.o
[100%] Linking CXX executable expirement
[100%] Built target expirement
~/foo
❯
现在运行实验,但是简化。 (另外,记得转义那些 * !)
~/foo
❯ ./expirement --gtest_filter='*'
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from StringTest
[ RUN ] StringTest.CheckReturnValue
[ OK ] StringTest.CheckReturnValue (0 ms)
[----------] 1 test from StringTest (0 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (0 ms total)
[ PASSED ] 1 test.
~/foo
❯
如果你能做到这一点,那就太好了!你一切顺利。您可以为 --gtest_filter 建立一个更严格的过滤器。 (记住要转义那些 *!)您可以构建您的 CMakeLists.txt 以包含您取出的那些 ExternalProject 位。但请记住,ExternalProject 中真正的强大功能和实用性是当您想要构建外部项目作为项目构建过程的一部分时。通常,引导用户自行下载和构建该外部项目要简单得多。
如果你没有做到这一点,就停下来。退后一步,查看您的代码。确保您已正确设置和定义测试。确保您正确初始化了 googletest。确保您的测试名称中没有任何拼写错误。 (一个常见的“陷阱”。)修复该部分,然后返回到 CMake 部分。
关于c++ - Google Test with CLion 未运行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43233905/
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/