Visual Studio 2012的C++原生单元测试
装上Visual Studio 2012 RC,其中一个原因,是C++的原生单元测试,与以前.net下完全一致。这是很开心的事情,下面简单的测试一下。
假设我们要使用Stl完成一项相对较通用的工作:为某个struct的vector,创建一个迭代器,用来返回struct的某个成员。这样做的意义是什么呢?假设我们要对该结构的vector,基于其某个字段排序,只需要为sort算法提供这种类型的迭代器就行了。这样算法就真正无需考虑容器“是什么”的问题。
当然,可以写一个比较函数来使用sort,但若是自己写的更复杂的算法呢?我们直接将struct数组,伪造成某个字段的数组,这样岂非是最省事的方法?
那么我们先创建一个本机单元测试项目。
先写测试代码,意思很简单,需要为某个vector创建迭代器器,检查其返回值是否正确,检查是否到了vector的最后位置:
TEST_METHOD(Iterator_Test) { vector<Quote> q; Quote quote={1.00,2.00}; q.push_back(quote); quote.open=2.00; q.push_back(quote); myit i(q.begin()); Assert::AreEqual((double)1.00, (double)(*i),0.0001, L"message", LINE_INFO()); ++i; Assert::AreEqual((double) 2.00, (double)(*i),0.0001, L"message", LINE_INFO()); ++i; Assert::AreEqual<vector<Quote>::iterator>(q.end(),i,L"message", LINE_INFO());
那么实现这项功能的方法也容易,代码如下:
struct Quote { float open,close; }; class myit : public std::vector<Quote>::iterator { public: inline myit(std::vector<Quote>::iterator const &c):std::vector<Quote>::iterator(c) {} float operator*() { const Quote &p = std::vector<Quote>::iterator::operator*(); return p.open; } typedef float value_type; typedef float *pointer; typedef float &reference; };
相关推荐
蛰脚踝的天蝎 2020-11-10
Cocolada 2020-11-12
TuxedoLinux 2020-09-11
snowphy 2020-08-19
83540690 2020-08-16
lustdevil 2020-08-03
83417807 2020-07-19
张文倩数据库学生 2020-07-19
bobljm 2020-07-07
83417807 2020-06-28
86427019 2020-06-28
86427019 2020-06-25
zhengzf0 2020-06-21
tobecrazy 2020-06-16
宿命java 2020-06-15
83417807 2020-06-15
84284855 2020-06-11