VS2012:单元测试出错:Assert :: AreEqual(object,object)不起作用

时间:2013-05-01 03:30:53

标签: c++ unit-testing visual-c++ visual-studio-2012

当我在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;
};
}

所以当我使用时会出现问题:     断言:: AreEqual(坐标(0,0),坐标(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:对不起我的英语,不是我的母语。

2 个答案:

答案 0 :(得分:18)

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

  

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

与需要为单元测试提供打印出预期和接收的值的方法有关。您可以通过在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.";
            }

        }
    }
}

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

答案 1 :(得分:0)

鉴于错误消息,您可以尝试使您的运算符==更友好:

bool operator==( const Coordinates coordinates ) const;