小编Ant*_*rez的帖子

XPath值的XML Schema类型定义?

我有一个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定义?

xml xsd

5
推荐指数
1
解决办法
2048
查看次数

字符串的64位整数转换

我正在处理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++ 64-bit gcc unsigned-long-long-int visual-studio

5
推荐指数
1
解决办法
4913
查看次数

假FTP服务器

我正在编写一个C++类,它作为FTP客户端执行一些操作.我想为它设置一些测试,所以我需要使用假的FTP服务器.

我一直在寻找一个,我想我可以用Python编写一些脚本并使用pyftpdlib.但我想在每次测试后设置和拆除服务器都会有一些缺点.

有关如何轻松运行假FTP服务器以便在C++中自动测试的任何建议都是值得欢迎的.

编辑:

我已经扩展了我的搜索并找到了MockFtpServer,这正是我想要的,尽管是用C++而不是Java编写的.

c++ ftp integration-testing unit-testing

4
推荐指数
1
解决办法
785
查看次数

如何获取uinput创建的设备的名称(路径)

我已成功设置一个小程序来创建一个设备,我打算用它来自动测试接收键盘输入事件的应用程序.

我已经按照这个非常好的答案中的两个 教程进行了操作.

当我的程序通过调用ioctl(fd, UI_DEV_CREATE)新设备创建uinput设备出现在文件系统中时,我的测试应用程序可以附加到它并等待事件.我的目标系统已经有了一个/dev/input/event0设备,所以新的设备获得了路径/dev/input/event1.如果我为我的桌面系统编译并运行程序,那里有现有设备/dev/input/event[0-15],当程序运行时,新设备就会获得/dev/input/event16.

我希望我的程序在创建后报告新设备名称.有办法搞定吗?

c linux linux-device-driver linux-kernel uinput

4
推荐指数
1
解决办法
1260
查看次数

Boost可选隐式转换为bool?

我正在读一些代码而且我遇到了一些我不理解的东西.它是关于测试是否初始化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是否保持正确值是足够的吗?

c++ boost googletest boost-optional

4
推荐指数
1
解决办法
1044
查看次数

在二进制模式下打开输入文件流时,skiwws标志设置为

我知道不应该在以二进制模式打开的输入流上使用提取运算符,而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标志的理由是什么?

c++ inputstream filestream

3
推荐指数
1
解决办法
1042
查看次数

使用模拟和死亡测试

我发现了 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)

c++ unit-testing googletest googlemock

3
推荐指数
1
解决办法
1568
查看次数

使用 CMake 和 CPack 仅为一个组件创建包

我有一个客户端/服务器应用程序项目,我为每个项目定义了一个安装组件。

set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)为了在运行时获取两个不同的包文件而使用make package。但是我没有为每个目标设定不同的目标。所以为了获得客户端安装包,我也编译并打包了服务器应用程序。

有没有一种简单的方法来获取单个组件的包装?

cmake cpack

3
推荐指数
1
解决办法
1022
查看次数

版本控制系统可以帮助单个开发人员

我目前是一名使用以下工作的开发人员.

  1. Mac适用于所有计算/代码要求
  2. Eclipse/Dreamweaver用于代码编辑
  3. 我的开发服务器的Windows Server 2008,CF8 IIS

目前,当我开发所有应用程序时,我开始发现我真的需要一个VCS来管理代码,因为我正在玩那种简单地用v1,v2等重命名文件的有趣游戏,但这正在成为一个我可以想象,下周开始工作的噩梦.

我的问题是,我不知道从哪里开始,我应该使用什么VCS,因为我想将所有内容存储在我的本地网络上,因为我的代码编写机是Mac,而我的开发服务器是一台Windows机器我是不确定我应该为VCS查看哪些产品.

如果有人在类似的位置,我很想听听你如何设置你的环境,这样你就可以管理你的代码,因为这被证明是一个噩梦......

提前致谢

macos version-control coldfusion

2
推荐指数
1
解决办法
340
查看次数

ASSERT_THROW:错误:无法忽略void值,因为它应该是

我是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)

googletest

2
推荐指数
1
解决办法
4489
查看次数