如何在VS2013上比较两个迭代器进行单元测试

How to compare two iterators for unit test on VS2013?

本文关键字:两个 迭代器 单元测试 VS2013 比较      更新时间:2023-10-16

code :

#include "stdafx.h"
#include "CppUnitTest.h"
#include <vector>
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace unit_test
{
    TEST_CLASS(test_iterator)
    {
    public:
        TEST_METHOD(vector_with_int)
        {
            std::vector<int> samples;
            Assert::AreEqual(samples.begin(), samples.begin());
        }
    };
}

编译时:

错误

1 错误 C2338:测试编写器必须为类定义 ToString 的专用化 std::basic_string,类 std::分配器> __cdecl Microsoft::VisualStudio::CppUnitTestFramework::ToString>>>(const class st::_Vector_iterator>> &)。 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\Unittest\include\CPPunitTestAssert.h 66 1 unit_test

如何解决这个问题?我应该改用另一个框架吗?

您可能

希望从每个迭代器中减去begin(如果它们是随机迭代器),以便比较偏移量而不是迭代器类型size_type

Assert::AreEqual(samples.begin() - samples.begin(), samples.begin() - samples.begin());

只需在测试之前添加以下内容:

namespace Microsoft { namespace VisualStudio { namespace CppUnitTestFramework {
   using vecint_itr = typename std::vector<int>::iterator;
   template<> inline std::wstring ToString<vecint_itr>(vecint_itr const & t)
   {
      return L"vecint_itr"; // replace with string with whatever you like
   }
}}}

这会将 ToString 函数注入到 CppUnitTestFramework 中,这是将迭代器转换为可由测试框架显示的字符串值所必需的。这正是错误消息要求您执行的操作。