• 简单尝试VS2012 Rc的C++原生单元测试


        装上Vs2012 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;
    };

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

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

  • 相关阅读:
    HTML & CSS
    Python面向对象编程
    Python 内置函数
    Python函数
    三.python高级
    使用loadrunner编写webservice接口请求
    loadrunner中JavaVuser脚本的编写
    loadrunner 参数化取值方式详解
    loadrunner 参数化-如何从数据库中取数据-连接数据库进行参数化
    vmstat命令参数介绍
  • 原文地址:https://www.cnblogs.com/by1990/p/2552752.html
Copyright © 2020-2023  润新知