- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在探索 Qt 的单元测试框架,我注意到一件奇怪的事情 - 考虑到 QString 已经为 const char *
实现了相等运算符,我本以为 QCOMPARE(QString( "1"), "1")
正常工作,但它会导致链接器错误:
tst_untitled14test.obj:-1: error: LNK2019: unresolved external symbol "bool __cdecl QTest::qCompare<class QString,char const [2]>(class QString const &,char const (&)[2],char const *,char const *,char const *,int)" (??$qCompare@VQString@@$$BY01$$CBD@QTest@@YA_NABVQString@@AAY01$$CBDPBD22H@Z) referenced in function "private: void __thiscall Untitled14Test::testCase1(void)" (?testCase1@Untitled14Test@@AAEXXZ)
示例代码:
QVERIFY(QString("1") == "1"); // This works.
QCOMPARE(QString("1"), QString("1")); // This works.
// QCOMPARE(QString("1"), "1"); // Causes a linker error!
这是为什么呢? QCOMPARE
不使用这两个项的相等运算符吗?
编辑:既然评论里问了,项目是通过Qt Creator的单元测试向导创建的(File->New Project->Other Project->Qt Unit Test),所以当然它已正确设置,并且包含 QT += teSTLib
。
最佳答案
来自 Qt documentation
QCOMPARE is very strict on the data types. Both actual and expected have to be of the same type, otherwise the test won't compile. This prohibits unspecified behavior from being introduced; that is behavior that usually occurs when the compiler implicitly casts the argument.
在源代码中QCOMPARE
看起来像
#define QCOMPARE(actual, expected) \
do {\
if (!QTest::qCompare(actual, expected, #actual, #expected, __FILE__, __LINE__))\
return;\
} while (0)
template <typename T>
inline bool qCompare(T const &t1, T const &t2, const char *actual, const char *expected,
const char *file, int line)
{
return compare_helper(t1 == t2, "Compared values are not the same",
toString(t1), toString(t2), actual, expected, file, line);
}
这是一个模板,要求第一个和第二个参数是同一类型。
关于c++ - 为什么 QCOMPARE(QString ("1"), "1") 会导致链接器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29102299/
QCOMPARE( std::numeric_limits::infinity(), std::numeric_limits::infinity()); 失败: Compared do
使用 QTestLib 构建测试时,出现 qCompare 的“ undefined symbol ”错误。功能: Undefined symbols for architecture x86_64:
我正在为尚未实现的功能编写测试。在下面的代码中,即使输出 vector 和结果 vector 具有相同的值,QCOMPARE 也会返回 False。有人可以解释为什么吗? void EigenValu
我想在我的代码中使用 QTest 宏 QCOMPARE,但我收到错误。 QTestString.h #ifndef QTESTSTRING_H #define QTESTSTRING_H #inclu
Qt 测试框架是否支持比较指针列表或者我做错了什么? 我的单元测试源码如下: QList list1; QList list2; list1.append(new QString("test"));
我正在探索 Qt 的单元测试框架,我注意到一件奇怪的事情 - 考虑到 QString 已经为 const char * 实现了相等运算符,我本以为 QCOMPARE(QString( "1"), "1
使用 c++/Qt5,我在 MyMap 对象上进行了 QCOMPARE 测试。这个 MyMap 对象有一个名为“map”的属性,它是一个 unorded_map (vector → QString)
我是一名优秀的程序员,十分优秀!