克隆了比特币核心并进行了构建。但是,我在system\u tests.cpp的第48行BOOST\u AUTO\u Test(run\u命令)中遇到单元测试失败。
首先,我的环境:
硬件:Intel i7-8550U@1.80GHz 2001 Mhz,4核,8个逻辑处理器,x64。
操作系统:Windows 10主页
工具链:visualstudio2019v142,配置:Release,平台x64。
生成完成时没有出现错误,但我确实收到以下消息:
C:\Users\name\source\repos\bitcoin first\build\u msvc\test\u bitcoin\test\u bitcoin.vcxproj:警告:VC项目不支持项目项中的通配符,可能会导致Visual Studio IDE中的意外行为、不稳定和性能下降。请参阅https://aka.ms/cpp/projectwildcards 支持的选项。
运行test\u bitcoin时,除源系统的run\u命令\u tests.cpp第48行外,所有测试都通过。我得到以下错误:
struct boost::process::process\错误:CreateProcess失败:系统找不到指定的文件。
VS测试资源管理器还提供:
未知位置(0):“run\u command”中出现异常:struct boost::process::process\u错误:CreateProcess失败:系统找不到指定的文件。系统测试.cpp(52):最后一个检查点:
system_tests.cpp中的相关代码(请忽略行号后的任何空格语法问题)。我手动添加了它们,它们没有问题):
48 BOOST\u AUTO\u TEST\u CASE(运行命令)
49 {
50 {
51 const UniValue result=RunCommandParseJSON(“”);
52 BOOST_CHECK(result.isNull());
53 }
54 {
55#ifdef WIN32
56//Windows需要单引号以防止从JSON中转义双引号。。。
57//const UniValue result=RunCommandParseJSON(“cmd.exe/c echo'{\“success\”:true}’);
58 const UniValue result=RunCommandParseJSON(“echo'{\“success\”:true}’”);
59
60#其他
61 // … 但是,如果使用Linux和macOS,它们只会引用一句话
62 const UniValue result=RunCommandParseJSON(“echo\”{\“success\”:true}\“”);
63#结束
64 BOOST_CHECK(result.isObject());
65 const UniValue&success=查找值(结果,“success”);
66增压检查(!success.isNull());
67 BOOST\u CHECK\u EQUAL(success.getBool(),true);
68 }
69 {
70//Boost处理无效命令
71 BOOST_CHECK_异常(RunCommandParseJSON(“无效的_命令”),BOOST::process::process_error,checkMessage);//命令失败
72 }
73 {
74//返回非零退出码,没有输出到stderr
75 BOOST\u CHECK\u异常(RunCommandParseJSON(“false”),std::runtime\u error,checkMessageFalse);
76 }
77 {
78//返回非零退出代码,并显示stderr的错误消息
79 BOOST\u CHECK\u异常(RunCommandParseJSON(“ls nosuchfile”),std::runtime\u error,checkMessageStdErr);
80 }
81 {
82 BOOST_REQUIRE_THROW(RunCommandParseJSON(“echo\”{\”),std::runtime_error);//无法分析JSON
83 }
84//Test std::in,Windows除外
85#如果NDEF WIN32
86 {
87 const UniValue result=RunCommandParseJSON(“cat”,“{\”success\“:true}”);
88 BOOST_CHECK(result.isObject());
89 const UniValue&success=查找值(结果,“success”);
90Ω检查(!success.isNull());
91 BOOST\u CHECK\u EQUAL(success.getBool(),true);
92 }
93#结束
94 }
95#endif//有ŠBOOSTŠ进程
58号线坏了。基于此https://stackoverflow.com/questions/47028660/boost-createprocess-failed,我删除了第58行并添加了以下第57行:
57 const UniValue result=RunCommandParseJSON(“cmd.exe/c echo'{\“success\”:true}’);
再次运行system_tests.cpp可以让我通过CreateProcess失败,但是在system_tests.cpp第48行run_command()中会产生以下失败:
类std::运行时错误:无法解析JSON:“{”success“:true}”。
VS测试资源管理器还声明:
未知位置(0):“run\u command”中出现异常:class std::runtime\u错误:无法分析JSON:“{”success“:true}”system\u tests.cpp(52):最后一个检查点:
我很难相信这个测试是错误的——我没有发现这个失败的原因。相反,我怀疑我没有正确设置某些开关、选项或配置。
任何意见或帮助将不胜感激。
也许下面的方法会奏效。
RunCommandParseJSON(“cmd.exe”,“/c echo'{\”success\“:true}’”);
分享
改进这个答案
跟随
4月4日20:42回答
潘昆
65133银牌1515铜牌
谢谢你的建议。我运行了它,得到了一个类似的运行时错误:class std::runtime\u错误:无法解析JSON:microsoftwindows[Version 10.0.19041.867]。在这里,它看起来像是ehco命令生成了“microsoftwindows[Version 10.0.19041.867]”。而在上一个运行时错误中,它生成了desire字符串{“success”:true}TKChattoraj 4月4日21:29