Class

一个类的实例可以使用类名.new来初始化,new方法会自动调用该类的initialize方法,但是由于initialize方法是类的私有方法,所以不能显式的调用它。 class Point def initialize(x, y) @x = x @y = y end end p = Point.new(2, 4) 上面的实例p并不能直接访问里面的实例变量@x,@y,因为Ruby是面向对象的语言,所以访问这些实例变量实际上是访问与实例变量的方法而已。如果直接使用p.x,Ruby会告诉你:"NoMethodError

How Minitest Works Part 2

注:本文以 minitest 的最新master 分支 baf6010 ,版本为5.8.4为基础。 所有代码可以在https://github.com/minitest_source[minitest_source] 找到. 在上一节我们留下了以下几个问题,本节我们透过对Minitest源码的分析来一探究竟: minitest/autorun 到底做了什么?继承Minitest::Test的目的何在,它内部有什么特殊方法?为什么以test_ 开头的方法执行了,而普通的方法没

How Minitest Works Part 1

注:本文以 minitest 的最新master 分支 baf6010 ,版本为5.8.4为基础。 所有代码可以在https://github.com/minitest_source[minitest_source] 找到. 一个简单的测试# 代码 1.1 # dog.rb class Dog def spark 'Spark!' end end # dog_test.rb require 'minitest/autorun' require_relative './dog' class DogTest < Minitest::Test def setup @dog = Dog.new end def test_dog_should_spark assert_respond_to @dog, :spark assert_equal 'Spark!', @dog.spark end def ordiary_method assert true end end 如何执行测试呢? $ ruby dog_test.rb Run options: --seed 24057 # Running: . Finished in 0.001039s, 962.5723 runs/s, 1925.1446 assertions/s. 1 runs, 2 assertions, 0 failures, 0 errors, 0 skips 如果我们把require 'minitest/autorun' 这一行注释掉,然后

写在前面

之前几乎不写测试,嗯,我属于那一类人。很多时候是自己先写一个功能,然后输入一些简单案例跑一跑,如果过了,那么就…​…​过了,可以放心继续下面的工作了。直到维护一个个前辈们的项目,而且功能不断添加,添加。问题接着出现了:按下葫芦浮起瓢,改了一个 Bug,引出了其它的 Bug。代码在修改过程中,越来越心里没底。更别说重构了。。。。 为什么要写测试?现在的 Coder 应该

The Difference Of XX-like Methods In Ruby

今日打开ruby-china发现Hooopo分享的一篇文章,感觉非常好,故记录之。 to_s和inspect的区别class David def to_s "to_s" end def inspect "inspect" end end david = David.new #inspect puts david #to_s print david #to_s p david #inspect 结论: 1. puts obj => puts obj.to_s 2. p obj => puts obj.inspect to_s和to_str的区别to_s和to_str在大部分时候是相同的,几乎每个对象都有to_s方法,(why?因为所有对象都继承自Object类),但是不是每个对象都有to_str方法,这个方法只有在