如何在VS2013上比较两个迭代器进行单元测试
How to compare two iterators for unit test on VS2013?
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 中,这是将迭代器转换为可由测试框架显示的字符串值所必需的。这正是错误消息要求您执行的操作。
相关文章:
- 计算两个迭代器之间的距离时"Vector Iterators Incompatible"
- 在C++中,是否可以在单个循环中顺序迭代多个迭代器
- 如何复制只有两个迭代器的数据?
- 为什么 std::span 是一个指针 + 大小而不是两个迭代器
- C++从两个迭代器创建列表对
- 如何定义模板函数,该功能在C 中占用两个迭代器
- 如何获取两个迭代器之间的元素总数
- 给定同一数据结构的两个迭代器,如何检查哪个迭代器在另一个之前
- 如何在VS2013上比较两个迭代器进行单元测试
- 具有两个迭代器的循环排列
- 在两个迭代器之间获取“std::string”的子字符串
- 比较模板函数中不同类型的两个迭代器
- 为什么两个迭代器在循环中移位
- 测试两个迭代器是否来自同一对象
- 如果没有for循环,我如何直接找到映射中指向两个不同键的任何两个迭代器之间的元素数量
- 在多映射中,当两个迭代器持有具有映射到不同Value的相同键的值时.我们如何才能在地图上找到它们中的哪一个在另一个之前
- 有没有人有STL算法的包装器,将一个容器而不是两个迭代器作为第一个参数
- 两个迭代器之间有多少个元素
- 交换容器中两个迭代器的位置
- 接受两个迭代器的模板