-2

我在命名空间 MyNameSpace 中有一个类 MyClass,并且我在测试单元中定义了一个 == 运算符,因此可以对类进行编译。

单元测试没有“编译”,因为没有运算符 == 匹配 const MyNameSpace Myclass、MyNamespace MyClass,即使我在单元测试中有它。

不使用命名空间按预期工作。

假设我们有:

namespace MyNamespace {
class MyClass {
public :
    QString a;
};
}

在测试单元中:

....
#include "myclass.h"
using namespace MyNamespace;
....

test_case1 {
    MyClass myClass;
    myClass.a = "test";

    MyClass myClass2;
    myClass2.a = "test";

    QCOMPARE(myClass, myClass2); //Fails to compile 
}

operator==(const MyNamespace::MyClass &class1, const MyNamespace::MyClass &class2) {
    return (class1.a == class2.a);
}
4

1 回答 1

0

我通过将 operator == 的定义包装到 std 命名空间中来解决

namespace std {
    bool operator==(const MyNamespace::MyClass class1, const MyNamespace::MyClass class2)
    {
        return (class1.a == class2.a);       
    }
}
于 2019-08-31T17:20:22.790 回答