1

我定义了一些在不同场合发出的信号:

signals:
    void buttonXClicked(int x);
    void numButtonsChanged(int num);

现在我只想看看这些信号的样子以及参数是否正确。似乎有几种方法可以监控信号。

在这里的帖子中,rohanpm 指的是在-vs此处更接近指定的参数:http: //qt-project.org/doc/qt-4.8/qtestlib-manual.html#qtestlib-command-line-arguments

这似乎是获取所需信息的一种优雅而快捷的方式。但老实说,我无法理解我必须如何以及在哪里运行-vs。它不是qmake. 我还要把它放在哪里?(我对qt很陌生)。

QSignalSpy相关,似乎有必要更改现有类?不是也有“外部”方法吗?

有很多关于如何测试插槽的文档 - 但与信号有关?我可以使用 aprintfcout某处吗?

4

2 回答 2

1

我在阅读有关 moc 及其功能的更多信息时得到了这个想法。(至少在使用 NetBeans 时)我在文件 ButtonTest.cpp 之外获得了 moc_ButtonTest.cpp 文件。里面有一个方法叫做:

// SIGNAL 0
void ButtonTest::buttonXClicked(int _t1)
{
    void *_a[] = { 0, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
    QMetaObject::activate(this, &staticMetaObject, 0, _a);    
}

我简直不敢相信它是如此简单,但我刚刚添加了一个

std::cout <<"buttonXClicked: "<<_t1;

它似乎正是我想要的。

于 2014-06-08T16:35:18.603 回答
0

正如链接文档所写:

使用所有可用的测试数据运行 toUpper 测试函数,并使用称为零的测试数据运行 toInt 测试函数(如果指定的测试数据不存在,则关联的测试将失败)。

/myTestDirectory$ testMyWidget -vs -eventdelay 500

其中 testMyWidget 是构建的测试二进制文件。这是-vs文档:

-vs 输出每个发出的信号

如果您 grep 帮助输出,还有更多文档:

/myTestDirectory$ testMyWidget --help | grep "\-vs"
-vs outputs every signal that gets emitted

如果你碰巧在编写QTestLib基于单元测试时遇到了麻烦,那么这是 Qt 4 的一个很好的起点:

QTestLib 手册

于 2014-06-03T15:34:54.753 回答