VS2012:单元测试错误:断言::AreEqual(对象,对象)不起作用

VS2012 : Error with unit test : Assert::AreEqual( object, object ) didn't work

本文关键字:对象 不起作用 AreEqual 单元测试 错误 断言 VS2012      更新时间:2023-10-16

当我在VS 2012上使用Visual Studio Native Unit Test时,我遇到了一个奇怪的问题。我有一个像这样的坐标类:

#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));

发送的错误是:c:program files (x86)microsoft visual studio 11.0vcunittestincludecppunittestassert.h 129 1 UnitTest1

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

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

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

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

与需要为单元测试提供一种方式打印出它期望和接收到的值有关。为此,可以在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.";
            }
        }
    }
}

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

给出错误消息,您可以尝试使操作符==对const更友好:

bool operator==( const Coordinates coordinates ) const;