Visual Studio 2012的C++原生单元测试

开发 后端
我们今天将要谈到的Visual Studio 2012的C++原生单元测试,将假设我们要使用Stl完成一项相对较通用的工作:为某个struct的vector,创建一个迭代器,用来返回struct的某个成员。

装上Visual Studio 2012 RC,其中一个原因,是C++的原生单元测试,与以前.net下完全一致。这是很开心的事情,下面简单的测试一下。

假设我们要使用Stl完成一项相对较通用的工作:为某个struct的vector,创建一个迭代器,用来返回struct的某个成员。这样做的意义是什么呢?假设我们要对该结构的vector,基于其某个字段排序,只需要为sort算法提供这种类型的迭代器就行了。这样算法就真正无需考虑容器“是什么”的问题。

当然,可以写一个比较函数来使用sort,但若是自己写的更复杂的算法呢?我们直接将struct数组,伪造成某个字段的数组,这样岂非是最省事的方法?

那么我们先创建一个本机单元测试项目。

先写测试代码,意思很简单,需要为某个vector创建迭代器器,检查其返回值是否正确,检查是否到了vector的最后位置: 

  1. TEST_METHOD(Iterator_Test)   
  2. {   
  3.     vector<Quote> q;   
  4.     Quote quote={1.00,2.00};   
  5.     q.push_back(quote);   
  6.     quote.open=2.00;   
  7.     q.push_back(quote);   
  8.     myit i(q.begin());   
  9.     Assert::AreEqual((double)1.00, (double)(*i),0.0001, L"message", LINE_INFO());   
  10.     ++i;   
  11.    Assert::AreEqual((double) 2.00, (double)(*i),0.0001, L"message", LINE_INFO());   
  12.    ++i;   
  13.   Assert::AreEqual<vector<Quote>::iterator>(q.end(),i,L"message", LINE_INFO());  

那么实现这项功能的方法也容易,代码如下:

  1. struct Quote  
  2. {  
  3.         float open,close;  
  4. };  
  5.  
  6. class myit : public std::vector<Quote>::iterator {  
  7. public:  
  8.     inline myit(std::vector<Quote>::iterator const &c):std::vector<Quote>::iterator(c) {}  
  9.     float operator*() {  
  10.         const Quote &p = std::vector<Quote>::iterator::operator*();  
  11.         return p.open;  
  12.     }  
  13.     typedef float value_type;  
  14.     typedef float *pointer;  
  15.     typedef float &reference;  
  16. }; 

注意,这里没有做任何抽象,仅仅是简单的实现一个针对vector<Quote>的迭代器,希望提供其作为算法的参数。若我们有兴趣的话,可以简单的抽象一下,针对任何容器,快速提供一个迭代器,返回其某个成员。类似Iterator<vector<Quote>,float,匿名函数返回某个成员> iter;当然,在抽象的过程中,现有的单元测试仍是有效的。这也是敏捷开发中很常见的次序:先写测试表达意图,再以最简易的方法通过测试,必要的时候才考虑抽象。

我们打开测试试图:列出已有的测试,选择希望运行的,执行。单元测试在Ide内很好的集成工作,同时与Tfs德生成服务也能正常协同,类似Google Test之类的,从此可以好生休息了。

责任编辑:彭凡 来源: 博客园
相关推荐

2010-01-15 14:10:42

C++单元测试

2011-01-25 10:42:29

Visual Stud

2010-03-02 09:10:41

Visual Stud

2022-08-05 09:30:57

单元测试C++

2010-01-13 09:38:17

C++单元测试

2017-01-14 23:42:49

单元测试框架软件测试

2014-04-24 13:43:37

CC++单元测试框架

2009-09-01 16:35:16

C#单元测试

2011-08-22 13:57:55

gtest

2010-01-12 16:12:47

C++单元测试

2023-07-26 08:58:45

Golang单元测试

2011-05-16 16:52:09

单元测试彻底测试

2017-01-14 23:26:17

单元测试JUnit测试

2017-01-16 12:12:29

单元测试JUnit

2011-06-14 15:56:42

单元测试

2020-08-18 08:10:02

单元测试Java

2022-05-12 09:37:03

测试JUnit开发

2009-09-01 16:45:00

C#单元测试工具

2009-09-01 16:10:28

C#单元测试

2017-03-23 16:02:10

Mock技术单元测试
点赞
收藏

51CTO技术栈公众号