8

当我在 VS 2012 上使用 Visual Studio 本机单元测试时,我来找你一个奇怪的问题。我有一个这样的 Coordinates 类:

#ifndef COORDINATES_HPP
#define COORDINATES_HPP

#include <iostream>

namespace Core {
class Coordinates {
public:
    Coordinates();
    Coordinates( int x, int y );
    Coordinates( const Coordinates &copy );
    ~Coordinates();

    void operator=( Coordinates coordinates );
    void operator+=( Coordinates coordinates );
    void operator-=( Coordinates coordinates );
    Coordinates operator+( Coordinates coordinates );
    Coordinates operator-( Coordinates coordinates );
    bool operator==( Coordinates coordinates );
    bool operator!=( Coordinates coordinates );

    int getX() const { return m_x; }
    int getY() const { return m_y; }
    void setX( const int &val ) { m_x = val; }
    void setY( const int &val ) { m_y = val; }

protected:
    int m_x, m_y;
};
}

所以当我使用时出现问题: Assert::AreEqual( Coordinates(0,0), Coordinates(0,0) );

发送的错误是:错误 1 ​​错误 C2678: 二进制 '==' : 未找到采用 'const Core::Coordinates' 类型的左操作数的运算符(或没有可接受的转换) c:\program files (x86 )\microsoft visual studio 11.0\vc\unittest\include\cppunittestassert.h 129 1 UnitTest1

你有解决这个问题的想法吗?

PS:对不起,我的英语不是我的母语。

4

2 回答 2

19

创建赋值运算符后收到的错误,即

错误 1 ​​错误 C2338:测试编写者必须为您的类 std::basic_string,class std::allocator > __cdecl Microsoft::VisualStudio::CppUnitTestFramework::ToString(const class Core::Coordinates &) 定义 ToString 的特化。

与需要为单元测试提供一种打印出它预期和接收到的值的方法有关。为此,您可以在Microsoft::VisualStudio::CppUnitTestFramework命名空间中创建 ToString 函数的模板特化。例如:

namespace Microsoft{
    namespace VisualStudio {
        namespace CppUnitTestFramework {

            template<>
            static std::wstring ToString<Coordinates>(const Coordinates  & coord) {
                return L"Some string representing coordinate.";
            }

        }
    }
}

之后,单元测试应该运行。

于 2014-06-10T23:01:20.237 回答
1

鉴于错误消息,您可以尝试使您的 operator== 更加 const 友好:

bool operator==( const Coordinates coordinates ) const;
于 2013-05-01T03:42:38.340 回答