rspec 针对元编程的测试

待测试类
 1 class MyClassDynamic
 2   DEFAULT_METHOD_NAME = :my_dynamic_method
 3
 4   def initialize(method_name = nil)
 5     method_name = DEFAULT_METHOD_NAME unless method_name
 6
 7     method_definition = Proc.new { method_name.to_s }
 8     self.class.send(:define_method, method_name, method_definition)
 9   end
10 end

rspec

 1 require ‘spec_helper‘
 2
 3 shared_examples "a dynamic my class" do |method_name = nil|
 4   let(:address) { method_name.nil? ? MyClassDynamic.new : MyClassDynamic.new(method_name) }
 5
 6   it "creates the method" do
 7     address.should respond_to method_name
 8   end
 9
10   it "returns the method name as a string" do
11     address.send(method_name).should eq(method_name.to_s)
12   end
13 end
14
15 describe MyClassDynamic do
16   it_behaves_like "a dynamic my class", MyClassDynamic::DEFAULT_METHOD_NAME
17   it_behaves_like "a dynamic my class", :my_dynamic_method
18   it_behaves_like "a dynamic my class", :your_dynamic_method
19 end
时间: 2024-10-24 22:57:17

rspec 针对元编程的测试的相关文章

《Effective C++》:条款48:认识template元编程

Template metaprogramming(TMP,模板元编程)是编写template-based C++程序,编译的过程.template metaprogramming是用C++写的模板程序,编译器编译出具体化的过程.也就是说,TMP程序执行后,从templates具体化出来C++源码,不再是模板了. TMP有两个作用,一是它让某些事更容易.例如编写STL容器,使用模板,可是存放任何类型元素.二是将执行在运行期的某些工作转移到了编译期.还有一个结果是使用TMP的C++程序可能在其他方面

使用模板元编程操作类型集合(C++11下的TypeList)

Wrote by mutouyun. (http://darkc.at/cxx-type-list/) 群里有个朋友要实现这么一个功能:如何在编译期把一个函数类型的参数减少一个. 简单来说,就是实现下面这个模板: remove_func_par<2, void(int, long, short)>::type; // type = void(int, long) 根据输入的编译期整数,把函数参数表里对应的参数干掉一个. 为了实现这种功能,我们需要操作变参模板的参数包.比如像这样: // mak

读书笔记 effective c++ Item 48 了解模板元编程

1. TMP是什么? 模板元编程(template metaprogramming TMP)是实现基于模板的C++程序的过程,它能够在编译期执行.你可以想一想:一个模板元程序是用C++实现的并且可以在C++编译器内部运行的一个程序,它的输出——从模板中实例化出来的C++源码片段——会像往常一样被编译. 2. 使用TMP的优势 如果这没有冲击到你,是因为你没有足够尽力去想. C++不是为了模板元编程而设计的,但是自从TMP早在1990年被发现之后,它就被证明是非常有用的,为了使TMP的使用更加容易

模板Trait 技术与简述template 元编程

模板Trait 技术 想了好久都没有想到合适的例子,已是干脆直接使用[1]中的例子就好了. STL 中引入了迭代器的概念.但是在本文中的例子不直接使用STL 的迭代器,而是写了一段很简短的代码,作为演示使用. 本例中的迭代器有三种: Forward_Iter,只能向前进,也就是只能加非负数 Bidirectional_Iter,可以双向增减 Random_Iter,可以随意增减 *本例并没有沿用STL 中的名称,请注意区别 对于三种的迭代器的偏移,大概如下: template<typename

初识C++模板元编程(Template Mega Programming)

前言:毕设时在开源库上做的程序,但是源码看得很晕(当时导师告诉我这是模板元编程,可以不用太在乎),最近自己造轮子时想学习STL的源码,但也是一样的感觉,大致了解他这么做要干什么,但是不知道里面的机制.于是开始学习<C++模板元编程>,看完第二章对一些东西豁然开朗. PS:该书也有点老了,C++11标准还没出来,主要用的Boost库. Traits(特征) 说正题,在STL中经常可以见到后缀为traits的名字,比如经常用到的std::string,本质是类模板basic_string的第一个参

C++11模版元编程

1.概述 模版元编程(template metaprogram)是C++中最复杂也是威力最强大的编程范式,它是一种可以创建和操纵程序的程序.模版元编程完全不同于普通的运行期程序,它很独特,因为模版元程序的执行完全是在编译期,并且模版元程序操纵的数据不能是运行时变量,只能是编译期常量,不可修改,另外它用到的语法元素也是相当有限,不能使用运行期的一些语法,比如if-else,for等语句都不能用.因此,模版元编程需要很多技巧,常常需要类型重定义.枚举常量.继承.模板偏特化等方法来配合,因此编写模版元

一道模板元编程题源码解答(replace_type)

今天有一同学在群上聊到一个比较好玩的题目(本人看书不多,后面才知是<C++模板元编程>第二章里面的一道习题), 我也抱着试一试的态度去完成它, 这道题也体现了c++模板元编程的基础和精髓: 类型就是数据. 题目如下所述: Write a ternary metafunction replace_type<c,x,y> that takes an arbitrary compound type c as its first parameter, and replaces all oc

使用元编程,用最简单的递归构造快速斐波那契数函数。

使用元编程和模板递归技术,既可以使最原始的递归方程具备惊人的快速高效. template <int T> class metafib { public: static const long long fib=metafib<T-1>::fib+metafib<T-2>::fib; }; template <> class metafib<1> { public: static const int fib=1; }; template <&g

Effective C++ Item 48 认识 template 元编程

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 经验:Template metaprogramming (TMP, 模板元编程)可将工作由运行期移往编译期,因而得以实现早期错误侦测和更高的执行效率 示例1: template<typename IterT, typename DistT> void advance(IterT &iter, DistT d){ if(typeid(typename std::iterator_t