我有一个XML文件,其中我有一个属性,其值为XPath,用于在不同的XML文件集中查找内容.
例:
<?xml version="1.0" encoding="utf-8"?>
<Root>
<IterestingNode Value="/html/head/title"/>
</Root>
Run Code Online (Sandbox Code Playgroud)
可以针对XSD验证此文件.目前我只是验证属性的值是一个字符串,但我想检查它是一个有效的有效XPath值.
是否有XPath值的XML Schema定义?
我正在处理unsigned long long从字符串中读取64位无符号整数的问题.我的代码应该适用于GCC 4.3和Visual Studio 2010.
我读了这个问题并回答了这个主题:从文件中读取64位整数字符串,这样strtoull可以使工作比使用a更好,更有效std::stringstream.很遗憾strtoull在Visual Studio中不可用stdlib.h.
所以我写了一个简短的模板函数:
template <typename T>
T ToNumber(const std::string& Str)
{
T Number;
std::stringstream S(Str);
S >> Number;
return Number;
}
unsigned long long N = ToNumber<unsigned long long>("1234567890123456789");
Run Code Online (Sandbox Code Playgroud)
我担心这个解决方案的效率,所以在这个方案中有更好的选择吗?
我正在编写一个C++类,它作为FTP客户端执行一些操作.我想为它设置一些测试,所以我需要使用假的FTP服务器.
我一直在寻找一个,我想我可以用Python编写一些脚本并使用pyftpdlib.但我想在每次测试后设置和拆除服务器都会有一些缺点.
有关如何轻松运行假FTP服务器以便在C++中自动测试的任何建议都是值得欢迎的.
编辑:
我已经扩展了我的搜索并找到了MockFtpServer,这正是我想要的,尽管是用C++而不是Java编写的.
我已成功设置一个小程序来创建一个输入设备,我打算用它来自动测试接收键盘输入事件的应用程序.
当我的程序通过调用ioctl(fd, UI_DEV_CREATE)新设备创建uinput设备出现在文件系统中时,我的测试应用程序可以附加到它并等待事件.我的目标系统已经有了一个/dev/input/event0设备,所以新的设备获得了路径/dev/input/event1.如果我为我的桌面系统编译并运行程序,那里有现有设备/dev/input/event[0-15],当程序运行时,新设备就会获得/dev/input/event16.
我希望我的程序在创建后报告新设备名称.有办法搞定吗?
我正在读一些代码而且我遇到了一些我不理解的东西.它是关于测试是否初始化Boost :: optional值.它使用提供ASSERT_TRUE()宏的gtest框架.
#include "gtest\gtest.h"
void test() {
boost::optional<someClass> opt = someFunc();
ASSERT_TRUE(!!opt);
}
Run Code Online (Sandbox Code Playgroud)
为什么我需要!!之前的opt?是boost::optional不是隐式转换为bool,这是宏所需要的?我认为用它ASSERT_TRUE(opt)来检查opt是否保持正确值是足够的吗?
我知道不应该在以二进制模式打开的输入流上使用提取运算符,而read应该使用成员函数。
std::ifstream ifs("file.bin", std::ios::in | std::ios::binary);
char c;
ifs >> c; // Should not be used
ifs.read(&c, 1); // OK
Run Code Online (Sandbox Code Playgroud)
但是还是可以做到的。所以我的问题是,在二进制模式下不取消输入文件流上的skipws标志的理由是什么?
我发现了 Google Test 的一个意外行为,当涉及到死亡测试以及对模拟对象的期望时。
检查以下示例:
#include <gmock/gmock.h>
#include <cassert>
class Interface
{
public:
virtual void foo() = 0;
};
class InterfaceMock : public Interface
{
public:
MOCK_METHOD0(foo, void());
};
class Bar
{
public:
void call(Interface& interface)
{
interface.foo();
assert(false);
}
};
TEST(BarTest, call_fooGetsCalledAndDies)
{
InterfaceMock mock;
EXPECT_CALL(mock, foo());
ASSERT_DEATH({ Bar().call(mock); }, "");
}
Run Code Online (Sandbox Code Playgroud)
测试失败,因为预期的调用mock.foo()失败断言:
Running main() from gmock_main.cc
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from BarTest
[ RUN …Run Code Online (Sandbox Code Playgroud) 我有一个客户端/服务器应用程序项目,我为每个项目定义了一个安装组件。
我set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)为了在运行时获取两个不同的包文件而使用make package。但是我没有为每个目标设定不同的目标。所以为了获得客户端安装包,我也编译并打包了服务器应用程序。
有没有一种简单的方法来获取单个组件的包装?
我目前是一名使用以下工作的开发人员.
目前,当我开发所有应用程序时,我开始发现我真的需要一个VCS来管理代码,因为我正在玩那种简单地用v1,v2等重命名文件的有趣游戏,但这正在成为一个我可以想象,下周开始工作的噩梦.
我的问题是,我不知道从哪里开始,我应该使用什么VCS,因为我想将所有内容存储在我的本地网络上,因为我的代码编写机是Mac,而我的开发服务器是一台Windows机器我是不确定我应该为VCS查看哪些产品.
如果有人在类似的位置,我很想听听你如何设置你的环境,这样你就可以管理你的代码,因为这被证明是一个噩梦......
提前致谢
我是gtest的初学者.我试图使用ASSERT_THROW将编译失败.任何人都可以帮助这个:
class my_exp {};
int main(int argc, char *argv[])
{
EXPECT_THROW(throw my_exp(), my_exp); // this will pass
// This will through below compilation error
ASSERT_THROW(throw my_exp(), my_exp);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译输出:
ERROR :
In file included from /usr/include/gtest/gtest.h:57:0,
from gtest.cpp:1:
gtest.cpp: In function ‘int main(int, char**)’:
gtest.cpp:12:3: error: void value not ignored as it ought to be
ASSERT_THROW(throw my_exp(), my_exp);
^
Run Code Online (Sandbox Code Playgroud) c++ ×5
googletest ×3
unit-testing ×2
64-bit ×1
boost ×1
c ×1
cmake ×1
coldfusion ×1
cpack ×1
filestream ×1
ftp ×1
gcc ×1
googlemock ×1
inputstream ×1
linux ×1
linux-kernel ×1
macos ×1
uinput ×1
xml ×1
xsd ×1