SlideShare a Scribd company logo
1 of 111
Download to read offline
The history of testing framework in Ruby Powered by Rabbit 2.1.9
The history of
testing framework
in Ruby
Kouhei Sutou
ClearCode Inc.
RubyKaigi 2015
2015-12-12
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Silver sponsor
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Goal
目標
You know about
/Atest.+unitz/i
/Atest.+unitz/iを知ること
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Test
テスト
Which Rubies do include
/Atest.+unitz/i?
/Atest.+unitz/iを含んでいるRubyはどれでしょう?
1.4 1.6 1.8
1.9.1 1.9.2 1.9.3
2.0 2.1 2.2
2.3
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Answer
答え
Which Rubies do include
/Atest.+unitz/i?
/Atest.+unitz/iを含んでいるRubyはどれでしょう?
1.4 1.6 1.8
1.9.1 1.9.2 1.9.3
2.0 2.1 2.2
2.3
History
歴史
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Characters
登場人物
testsupp RubyUnit
Lapidary
Test::Unit test/unit
test-unit minitest
RSpec
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Ruby 1.3 times
Ruby 1.3の時代
1998-1999✓
The first testing framework
for Ruby was released
最初のRuby用のテスティングフレームワークがリリース
testsupp✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
testsupp
1999-4-11: [ruby-talk:00634]
ANN: testsupp.rb 0.1
✓
Perl's Test like API
PerlのTestモジュールのようなAPI
Perl's Test exists since 1998
PerlのTestモジュールは1998からある
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
testsupp: API
require "testsupp"
include TestSupp
start_tests
ok "Hello" == "Hello"
end_tests
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Ruby 1.4 times
Ruby 1.4の時代
1999-2000✓
The first xUnit testing
framework for Ruby was
released
最初のRuby用のxUnit系テスティングフレームワークが
リリース
RubyUnit✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
RubyUnit
Since 1999-11-20 at least
少なくとも1999年11月20日には存在していた
[ruby-list:18594]
"RubyUnit のページは当分更新されないと思うです."
✓
✓
The first xUnit testing
framework for Ruby
最初のRuby用のxUnit系テスティングフレームワーク
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
FYI: XP
参考情報:XP
eXtream Programing✓
The first XP book was
published at 1999
最初のXPの本は1999年に出版
✓
xUnit was born from XP
xUnitはXPが生み出した
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
RubyUnit: API
require "runit/testcase"
class TestCalc < RUNIT::TestCase
def test_add
assert_equal(3, 1 + 2)
end
end
The history of testing framework in Ruby Powered by Rabbit 2.1.9
RubyUnit: Impression
感想
Ruby-ish
Rubyっぽい
The history of testing framework in Ruby Powered by Rabbit 2.1.9
RubyUnit: FYI
RubyUnit:参考情報
Test generator exists
テストジェネレーターがある
✓
Test exec command exists
テスト実行コマンドがある
✓
rubyunit gem exists since 2014-10-12
rubyunitというgemが2014年10月12日から存在する
Not related product
関係のないプロダクト
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Ruby 1.6 times: 1
Ruby 1.6の時代:1
2000-2002✓
The second xUnit testing
framework for Ruby was
released
2つ目のRuby用のxUnit系テスティングフレームワークが
リリース
Lapidary✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Lapidary
The first release was
2001-03-20
最初のリリースは2001年3月20日
✓
The second xUnit testing
framework for Ruby
2つ目のRuby用のxUnit系テスティングフレームワーク
Maybe
たぶん
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Lapidary: API
require "Lapidary/TestCase"
class TC_Adder < Lapidary::TestCase
def testAdd
assertEqual(3, 1 + 2)
end
end
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Lapidary: Impression
感想
Not Ruby-ish
Rubyっぽくない
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Lapidary: FYI
参考情報
Has GUI test runner
GUIのテスト実行機能アリ
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Ruby 1.6 times: 2
Ruby 1.6の時代:2
Started trying to bundle a
testing framework to Ruby
テスティングフレームワークをRubyにバンドルする
試みを開始
RubyUnit + Lapidary = Test::Unit✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Test::Unit
Since 2002-02:
[ruby-talk:34744]
✓
The first /Atest.+unitz/i
最初の/Atest.+unitz/i
✓
The author is the author of
Lapidary
Lapidaryの作者が作者
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Test::Unit: API
require "test/unit"
class TC_Adder < Test::Unit::TestCase
def test_add
assert_equal(3, 1 + 2)
end
end
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Test::Unit: Impression
感想
Ruby-ish
Rubyっぽい
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Test::Unit: FYI 1
参考情報1
API is based on RubyUnit
APIはRubyUnitのよう
Has RubyUnit compatible API
RubyUnit互換APIアリ
✓
✓
Impl. is based on Lapidary
実装はLapidaryベース
Has GUI test runner
GUIのテスト実行機能アリ
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Wrap up: Before Ruby 1.8
Ruby 1.8の前までのまとめ
testsupp: Perl like API✓
RubyUnit: Ruby-ish xUnit✓
Lapidary: Not Ruby-ish xUnit✓
Test::Unit:
RubyUnit API + Lapidary Impl.✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Ruby 1.8 times: 1
Ruby 1.8の時代:1
2003-2013✓
Ruby bundled a testing
framework
Rubyがテスティングフレームワークをバンドルした
Test::Unit aka test/unit
バンドルされたのはTest::Unit
test/unitとも呼ばれる
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
FYI: Why test/unit?
参考情報:なぜtest/unitと呼ぶか
require "test/unit"
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Ruby 1.8 times: 2
Ruby 1.8の時代:2
RSpec was born
RSpec誕生
The history of testing framework in Ruby Powered by Rabbit 2.1.9
RSpec
Since 2005-08✓
Tool for Behavior Driven
Development
振る舞い駆動開発用のツール
✓
Active development
開発は活発
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
RSpec 0.1.0: API
# 2005-08
require "spec"
class SpecAdd < Spec::Context
def add
(1 + 2).should_equal 3
end
end
The history of testing framework in Ruby Powered by Rabbit 2.1.9
RSpec: 1.0.0: API
# 2007-05
require "spec"
describe "Add" do
it "should support positive + positive" do
(1 + 2).should == 3
end
end
The history of testing framework in Ruby Powered by Rabbit 2.1.9
RSpec 1.0.0: Impression
感想
Engl-ish
英語っぽい
The history of testing framework in Ruby Powered by Rabbit 2.1.9
RSpec: FYI
参考情報
Test exec command exists
テスト実行コマンドがある
RubyUnit like
RubyUnitみたい
✓
✓
More features than Test::Unit
Test::Unitより機能が多い
Mock, Not implemented, ...
モックや未実装など
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Test::Unit in Ruby 1.8
Ruby 1.8バンドル後のTest::Unit
No active development
開発は停滞
✓
Maintainer was changed
メンテナー交代
The author of minitest
後のminitestの作者
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
RSpec and Test::Unit
RSpec is getting better but
Test::Unit isn't changed...
RSpecはよくなっているのにTest::Unitは変わらない。。。
✓
Test::Unit should also be
getting better!
Test::Unitももっとよくしたい!
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Test::Unit:
new maintainer
新しいメンテナー
New maintainer said:
新メンテナー曰く
Can't maintain Test::Unit because
it's too complex
Test::Unitは複雑すぎてメンテナンスできない
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Wrap up: Ruby 1.8 times
Ruby 1.8時代のまとめ
Ruby started bundling
Test::Unit (/Atest.+unitz/i)
RubyがTest::Unitのバンドルを始めた
But Test::Unit was died...
バンドル後、Test::Unitは死んだ。。。
✓
✓
RSpec was born and active
RSpecが生まれ、活発だった
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Ruby 1.9 times
Ruby 1.9の時代
2009-2014✓
Ruby dropped Test::Unit
RubyがTest::Unitを捨てた
Because Test::Unit is too complex
for new maintainer
新メンテナーにはTest::Unitは複雑すぎるから
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Test::Unit → test-unit
Released as test-unit gem
test-unit gemとしてリリース
Still /Atest.+unitz/i
名前変更後も/Atest.+unitz/i
✓
test-unit 1.2.3 == Test::Unit in Ruby 1.8✓
✓
Maintainer was changed
メンテナー交代
Me
私
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
test-unit
Since 2008-03✓
Active development
開発は活発
✓
High backward compatibility
高い後方互換性
Exception: Inheritance
例外:継承時の挙動
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
minitest
Since 2008-10✓
Active development
開発は活発
✓
The author is the new
maintainer of Test::Unit
作者はTest::Unitの新メンテナー
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
minitest and Test::Unit
Mini, simple, clean and fast
小さくてシンプルでキレイで速い
✓
The author said:
作者曰く
100% Test::Unit compatible
Test::Unitと100%互換
✓
But it's not compat in fact...
実際は互換ではなかった。。。
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
test/unit in Ruby 1.9
Provide Test::Unit API
Test::Unit互換APIを提供
✓
Wrapper of minitest
minitestのラッパー
Ruby developers developed it
not minitest author
minitestの作者ではなくRuby開発者が開発
✓
✓
Not Test::Unit but /Atest.+unitz/i
Test::Unitではないが/Atest.+unitz/iではある
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Wrap up: Ruby 1.9 times
Ruby 1.9時代のまとめ
Ruby dropped Test::Unit
RubyがTest::Unitを捨てた
Test::Unit → test-unit gem✓
✓
Ruby bundled minitest
Rubyはminitestをバンドルした
✓
Ruby created test/unit
(test/unit provided Test::Unit API)
RubyはTest::Unit APIを提供するtest/unitを新しく作った
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Ruby 2.0 times
Ruby 2.0の時代
2013-✓
No highly important things
特筆すべきことはない
test-unit, minitest and RSpec
were actively developed
test-unitもminitestもRSpecも活発に開発が進んでいた
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Ruby 2.1 times: 1
Ruby 2.1の時代:1
2013-✓
minitest 5 introduced
incompatible changes
minitest 5で非互換の変更が入った
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
minitest 5
test/unit maintainer said:
test/unitメンテナー曰く
Can't maintain test/unit with
minitest 5
minitest 5向けのtest/unitはメンテナンスできない
✓
✓
test/unit for minitest was
dropped
minitestのラッパーとしてのtest/unitを捨てた
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Is no test/unit problem?
test/unitがないことは問題なのか?
Ruby used test/unit for
Ruby's tests
RubyはRubyのテストにtest/unitを使っていた
No test/unit means existing tests
can't be worked
test/unitがなくなると既存のテストが動かない
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Solution idea: 1
解決案:1
Keep bundling and using
minitest 4
minitest 4のバンドルを継続し、使い続ける
Users will be confused because
the latest Ruby doesn't bundle
the latest minitest
最新のRubyに最新のminitestがバンドルされていないと
ユーザーは混乱しそう
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Solution idea: 2
解決案:2
Bundle the latest minitest
最新のminitestをバンドルする
Ruby uses minitest 4 and test/
unit for its tests
Rubyのテストにはminitest 4とtest/unitを使う
✓
✓
Accepted!
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Note for idea 2
案2の補足
Need to care existing
Test::Unit API users
既存のTest::Unit APIユーザーをケアする必要がある
Backward compat is important!
後方互換性は重要!
✓
✓
Bundle test-unit gem too for
Test::Unit API
Test::Unit互換APIのためにtest-unit gemもバンドル
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Wrap up: Ruby 2.1 times
Ruby 2.1時代のまとめ
Ruby developers decided to
maintain minitest 4 and test/
unit for Ruby's tests
Ruby開発者はRubyのテスト用にminitest 4とtest/unitをメ
ンテナンスすることを決めた
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Ruby 2.2 times: 1
Ruby 2.2の時代:1
2014-✓
Upgraded bundled minitest to
5
バンドルしているminitestを5に更新
Moved minitest 4 and test/unit to
test/
minitest 4とtest/unitはtest/以下に移動
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Upgraded minitest to 5
minitest 5に更新
- lib/minitest/*.rb
+ test/lib/minitest/*.rb
- lib/test/unit.rb
+ test/lib/test/unit.rb
- lib/test/unit/**/*.rb
+ test/lib/test/unit/**/*.rb
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Ruby 2.2 times: 2
Ruby 2.2の時代:2
Bundled test-unit gem again
for users
再びtest-unit gemをバンドル
Ruby 1.9 dropped test-unit gem
Ruby 1.9はtest-unit gemを捨てた
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Bundled test-unit again
test-unitを再びバンドル
test-unit gem provides:
lib/test-unit.rb
lib/test/unit.rb
lib/test/unit/**/*.rb
The history of testing framework in Ruby Powered by Rabbit 2.1.9
test/unit in Ruby 2.2
Ruby 2.2のtest/unit
For Ruby developers
Ruby開発者にとっては
test/lib/test/unit✓
✓
For users
ユーザーにとっては
lib/test/unit = test-unit gem✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
FYI: test/lib/test/unit
Includes useful features for
Ruby's tests
Ruby本体のテストに便利な機能が入っている
Leak checker for file descriptor,
thread, process...
リークチェッカー:ファイルディスクリプターやスレッ
ドのリークやゾンビプロセスを検出
✓
Memory usage profiler
メモリー使用量のプロファイラー
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Wrap up: Ruby 2.2 times
Ruby 2.2時代のまとめ
Bundled minitest 5
minitest 5をバンドル
✓
Bundled test-unit again
再びtest-unitをバンドル
✓
Ruby's tests used forked
mintiest 4 and test/unit
Rubyのテストはフォークしたminitest 4とtest/unitを使う
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Ruby 2.3 times
Ruby 2.3の時代
2015-✓
No highly important things
特筆すべきことはない
test-unit, minitest, test/lib/
test/unit and RSpec were actively
developed
test-unitもminitestもtest/lib/test/unitもRSpecも活
発に開発が進んでいた
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Wrap up: History: 1
歴史のまとめ:1
Ruby 1.4 and 1.6 didn't
bundle any testing framework
Ruby 1.4と1.6はテスティングフレームワークをバンドル
していなかった
✓
Test::Unit was born in Ruby
1.6 times
Ruby 1.6の時代にTest::Unitが生まれた
The first /Atest.+unitz/i✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Wrap up: History: 2
歴史のまとめ:2
Ruby 1.8 bundled Test::Unit
Ruby 1.8はTest::Unitをバンドルした
/Atest.+unitz/i in 1.8✓
✓
Ruby 1.9 dropped Test::Unit
and bundled minitest
Ruby 1.9はTest::Unitを捨ててminitestをバンドルした
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Wrap up: History: 3
歴史のまとめ:3
Ruby 1.9 provided test/unit
as a wrapper of minitest
Ruby 1.9はminitestのラッパーとしてtest/unitを提供した
test/unit provided Test::Unit
compatible API
test/unitはTest::Unitの互換APIを提供した
✓
/Atest.+unitz/i in 1.9✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Wrap up: History: 4
歴史のまとめ:4
Ruby 2.0 is same as Ruby 1.9
Ruby 2.0の状況はRuby 1.9と変わらない
test/unit is /Atest.+unitz/i in
2.0
つまり、2.0での/Atest.+unitz/iはtest/unit
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Wrap up: History: 5
歴史のまとめ:5
Ruby 2.1 didn't upgrade
minitest to 5
Ruby 2.1はminitestを5に更新しなかった
minitest 5 has backward
incompatible changes
minitest 5には後方非互換の変更があった
✓
They break Ruby's tests
非互換を受け入れるとRubyのテストが動かなくなる
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Wrap up: History: 6
歴史のまとめ:6
Ruby 2.2 upgraded minitest
Ruby 2.2はminitestを5に更新した
Dropped test/unit as minitest
wrapper
Ruby 2.2はminitestのラッパーのtest/unitを捨てた
✓
Used forked minitest 4 and test/
unit for its tests
Ruby 2.2はRubyのテスト用にminitest 4のフォークと
test/unitを使うことにした
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Wrap up: History: 7
歴史のまとめ:7
Ruby 2.2 bundled test-unit
gem again
Ruby 2.2はtest-unit gemを再びバンドルした
/Atest.+unitz/i in 2.2✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Wrap up: History: 8
歴史のまとめ:8
test/lib/test/unit was
evolved for Ruby's tests
test/lib/test/unitはRubyのテスト用に進化した
/Atest.+unitz/i in 2.2 too✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Wrap up: History: 9
歴史のまとめ:9
No highly important things
in Ruby 2.3
Ruby 2.3には特筆すべきことはない
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
What's /Atest.+unitz/i
/Atest.+unitz/iはなにか
Test::Unit
compatible API
Test::Unit互換API
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Test::Unit compat API
Test::Unit互換API
class XXXTest < Test::Unit::TestCase
def test_xxx
assert_equal(xxx, yyy)
end
end
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Test::Unit API spirit
Test::Unit APIの魂
Ruby-ish
Rubyらしさ
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Ruby-ish in Test::Unit
Test::UnitでのRubyらしさ
Write test as normal Ruby
script
普通のRubyスクリプトのようにテストを書ける
It's important in minitest too
minitestもこれを大事にしている
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
By example: 1
実例:1
Grouping tests
テストのグループ化
↓
class
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Group: 1
グループ化:1
class TestAdd < Test::Unit::TestCase
def test_positive_positive
assert_equal(3, 1 + 2)
end
def test_positive_negative
assert_equal(-2, 1 + -3)
end
end
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Group: 2
グループ化:2
class TestSub < Test::Unit::TestCase
def test_positive_positive
assert_equal(-2, 1 - 3)
end
def test_positive_negative
assert_equal(4, 1 - -3)
end
end
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Group: 3
グループ化:3
class TestCalc < Test::Unit::TestCase
class TestAdd < self # TestAdd < TestCalc
# def test_positive_positive
# def test_positive_negative
end
class TestSub < self # TestAdd < TestCalc
# def test_positive_positive
# def test_positive_negative
end
end
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Wrap up: Group: 1
グループ化のまとめ:1
Test case has tests
テストケースは複数のテストを持つ
Test case is class
テストケースをクラスとして実装
✓
Test is method
テストをメソッドとして実装
✓
Class has methods
クラスは複数のメソッドを持つ
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Wrap up: Group: 2
グループ化のまとめ:2
Sub test case is sub class
サブテストケースはサブクラスとして実装
Sub test case is-a parent test
case
TestAdd is a test case of TestCalc
サブテストケースは親テストケースとis-aの関係
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
FYI: Group
参考情報:グループ化
Test::Unit and minitest
don't support sub test case
is a sub class
Test::Unitとminitestはサブクラスでサブテストケースを
作ることをサポートしていない
✓
test-unit only supports it
test-unitだけがサポートしている
It's the only one incompatible
唯一の非互換
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
FYI: Group DSL
参考情報:グループ化DSL
class TestCalc < Test::Unit::TestCase
sub_test_case "+" do
test "positive + negative" {}
end
sub_test_case "-" do
test "positive - negative" {}
end
end
test-unit feature
The history of testing framework in Ruby Powered by Rabbit 2.1.9
By example: 2
実例:2
Share tests
テストの共有
↓
module
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Share: 1
共有:1
module KVSTests
def test_read_write
@kvs[:key] = :value
assert_equal(:value, @kvs[:key])
end
end
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Share: 2
共有:2
class TestKVSHash < Test::Unit::TestCase
include KVSTests
def setup; @kvs = {}; end
end
class TestKVSOpenStruct < Test::Unit::TestCase
include KVSTests
def setup; @kvs = OpenStruct.new; end
end
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Wrap up: Share
共有のまとめ
Tests can be shared by module
モジュールでテストを共有できる
Module is used for sharing method
implementations in Ruby
Rubyではモジュールはメソッドの実装を共有するために
使われている
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
By example: 3
実例:3
Assertion
アサーション
↓
Write as-is
そのまま書く
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Assert: Equal
アサート:等価
def test_add
assert_equal(3,
1 + 2)
# ↑↓ as-is
# RSpec: expect(1 + 2).to eq(3)
end
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Assert: Predicate
アサート:述語
def test_exist_readme
assert(File.exist?("README"))
# ↑ as-is ↓ not as-is
# RSpec: expect(File).to exist("README")
end
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Message from minitest
1) Failure:
TestFile#test_exist_readme [test-file-minitest.rb:5]:
Failed assertion, no message given.
Less information
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Message from RSpec
1) File README should exist
Failure/Error: expect(File).to exist("README")
expected File to exist
# ./spec-file.rb:5:in `block (2 levels) in <top (required)>'
Colorized and snippet
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Message from test-unit
Failure: <false> is not true.
test_exist_readme(TestFile)
test-file-test-unit.rb:5:in `test_exist_readme'
2:
3: class TestFile < Test::Unit::TestCase
4: def test_exist_readme
=> 5: assert(File.exist?("README"))
6: end
7: end
Colorized and snippet
The history of testing framework in Ruby Powered by Rabbit 2.1.9
power-assert
def test_exist_readme
assert do # ↓ as-is
File.exist?("README")
end
end
Built-in in test-unit
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Message: power-assert
Failure:
File.exist?("README")
| |
| false
File (NOTE: ← Receiver information)
test_exist_readme(TestFile)
/usr/lib/ruby/vendor_ruby/power_assert.rb:36:in `start'
test-file-power-assert.rb:5:in `test_exist_readme'
2:
3: class TestFile < Test::Unit::TestCase
4: def test_exist_readme
=> 5: assert do
6: File.exist?("README")
7: end
8: end
The history of testing framework in Ruby Powered by Rabbit 2.1.9
FYI: test-unit and power-
assert
Don't recommend
"all power-assert"
すべてpower-assertは非推奨
Recommend "power-assert only for
predicate"
述語だけpower-assertを推奨
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Assert: Equal
# @group.users should return
# sorted names of user
assert_equal(user_names.sort,
@group.users)
# ↑ Align-able
assert do
@group.users == user_names.sort
end
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Align
縦に並べる
Indicate compare targets
visually
視覚的に比較対象ということを示す
✓
Clarify differences visually
視覚的に違いを明確にする
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Experiment: 1
実験:1
Find a difference!
違うところを探せ!
Hello | Heilo
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Experiment: 2
実験:2
Find a difference!
違うところを探せ!
Hello
Heilo
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Align in Ruby
Rubyで縦に並べる
# Arguments are natural
method(arg1,
arg2)
# Operands aren't natural
operand1 ==
operand2
引数だと自然だけどオペランドだと不自然
The history of testing framework in Ruby Powered by Rabbit 2.1.9
FYI: test-unit and power-
assert
Don't recommend
"all power-assert"
すべてpower-assertは非推奨
Recommend "power-assert only for
predicate"
述語だけpower-assertを推奨
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
FYI: Fixture
参考情報:フィクスチャー
Ensure
clean test
environment
キレイなテスト環境を用意する仕組み
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Fixture: e.g.
フィクスチャー:例
def setup; p :s; end
def teardown; p :t; end
def test_1; p :t1; end
def test_2; p :t2; end
# :s -> :t1 -> :t ->
# :s -> :t2 -> :t
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Fixture: Open file
フィクスチャー:ファイルを開く
def setup
@file = File.open("x")
end
def teardown
@file.close
end
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Fixture: Open file
フィクスチャー:ファイルを開く
Not Ruby-ish
Rubyっぽくない
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Fixture: Open File
フィクスチャー:ファイルを開く
def setup # Ruby-ish version
File.open("x") do |file|
@file = file
yield
end # Close file automatically
end
New feature in test-unit
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Wrap up: Test::Unit API
まとめ:Test::Unit API
Ruby-ish is important in
Test::Unit API
Test::Unit APIではRubyらしいことは重要
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Wrap up: Test::Unit API
まとめ:Test::Unit API
(Sub) test case by (sub) class
(サブ)テストケースには(サブ)クラスを使う
✓
Share tests by module
テストの共有にはモジュールを使う
✓
as-is in assert
アサートではそのままの使い方で書く
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Wrap up: Test::Unit API
まとめ:Test::Unit API
More Ruby-ish
さらにRubyっぽく
Support block based fixture
ブロックを使ったフィクスチャーもサポート
✓
✓
The history of testing framework in Ruby Powered by Rabbit 2.1.9
Goal
目標
You know about
/Atest.+unitz/i
/Atest.+unitz/iを知ること

More Related Content

What's hot

Java 9 and the impact on Maven Projects (Devoxx 2016)
Java 9 and the impact on Maven Projects (Devoxx 2016)Java 9 and the impact on Maven Projects (Devoxx 2016)
Java 9 and the impact on Maven Projects (Devoxx 2016)Robert Scholte
 
Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...
Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...
Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...Peter Pilgrim
 
Mobicents Summit 2012 - George Vagenas - Testing SIP Applications with Arquil...
Mobicents Summit 2012 - George Vagenas - Testing SIP Applications with Arquil...Mobicents Summit 2012 - George Vagenas - Testing SIP Applications with Arquil...
Mobicents Summit 2012 - George Vagenas - Testing SIP Applications with Arquil...telestax
 
Gradle build tool that rocks with DSL JavaOne India 4th May 2012
Gradle build tool that rocks with DSL JavaOne India 4th May 2012Gradle build tool that rocks with DSL JavaOne India 4th May 2012
Gradle build tool that rocks with DSL JavaOne India 4th May 2012Rajmahendra Hegde
 
GlassFish v3, OSGi Equinox Felix
GlassFish v3, OSGi Equinox FelixGlassFish v3, OSGi Equinox Felix
GlassFish v3, OSGi Equinox FelixLudovic Champenois
 
Ch10.애플리케이션 서버의 병목_발견_방법
Ch10.애플리케이션 서버의 병목_발견_방법Ch10.애플리케이션 서버의 병목_발견_방법
Ch10.애플리케이션 서버의 병목_발견_방법Minchul Jung
 
Postgresql 9.0 HA at LOADAYS 2012
Postgresql 9.0 HA at LOADAYS 2012Postgresql 9.0 HA at LOADAYS 2012
Postgresql 9.0 HA at LOADAYS 2012Julien Pivotto
 
DevDay 2016: Dave Farley - Acceptance testing for continuous delivery
DevDay 2016: Dave Farley - Acceptance testing for continuous deliveryDevDay 2016: Dave Farley - Acceptance testing for continuous delivery
DevDay 2016: Dave Farley - Acceptance testing for continuous deliveryDevDay Dresden
 
Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...
Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...
Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...Puppet
 
Java9 and the impact on Maven Projects (JFall 2016)
Java9 and the impact on Maven Projects (JFall 2016)Java9 and the impact on Maven Projects (JFall 2016)
Java9 and the impact on Maven Projects (JFall 2016)Robert Scholte
 
How to Test Enterprise Java Applications
How to Test Enterprise Java ApplicationsHow to Test Enterprise Java Applications
How to Test Enterprise Java ApplicationsAlex Soto
 
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)Robert Scholte
 
On-Demand Image Resizing Extended - External Meet-up
On-Demand Image Resizing Extended - External Meet-upOn-Demand Image Resizing Extended - External Meet-up
On-Demand Image Resizing Extended - External Meet-upJonathan Lee
 
Spocktacular testing
Spocktacular testingSpocktacular testing
Spocktacular testingRussel Winder
 

What's hot (19)

Java 9 and the impact on Maven Projects (Devoxx 2016)
Java 9 and the impact on Maven Projects (Devoxx 2016)Java 9 and the impact on Maven Projects (Devoxx 2016)
Java 9 and the impact on Maven Projects (Devoxx 2016)
 
Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...
Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...
Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...
 
Mobicents Summit 2012 - George Vagenas - Testing SIP Applications with Arquil...
Mobicents Summit 2012 - George Vagenas - Testing SIP Applications with Arquil...Mobicents Summit 2012 - George Vagenas - Testing SIP Applications with Arquil...
Mobicents Summit 2012 - George Vagenas - Testing SIP Applications with Arquil...
 
Gradle build tool that rocks with DSL JavaOne India 4th May 2012
Gradle build tool that rocks with DSL JavaOne India 4th May 2012Gradle build tool that rocks with DSL JavaOne India 4th May 2012
Gradle build tool that rocks with DSL JavaOne India 4th May 2012
 
GlassFish v3, OSGi Equinox Felix
GlassFish v3, OSGi Equinox FelixGlassFish v3, OSGi Equinox Felix
GlassFish v3, OSGi Equinox Felix
 
Ch10.애플리케이션 서버의 병목_발견_방법
Ch10.애플리케이션 서버의 병목_발견_방법Ch10.애플리케이션 서버의 병목_발견_방법
Ch10.애플리케이션 서버의 병목_발견_방법
 
What's new in Java 11
What's new in Java 11What's new in Java 11
What's new in Java 11
 
Groovy Testing
Groovy TestingGroovy Testing
Groovy Testing
 
Postgresql 9.0 HA at LOADAYS 2012
Postgresql 9.0 HA at LOADAYS 2012Postgresql 9.0 HA at LOADAYS 2012
Postgresql 9.0 HA at LOADAYS 2012
 
DevDay 2016: Dave Farley - Acceptance testing for continuous delivery
DevDay 2016: Dave Farley - Acceptance testing for continuous deliveryDevDay 2016: Dave Farley - Acceptance testing for continuous delivery
DevDay 2016: Dave Farley - Acceptance testing for continuous delivery
 
OSGi Presentation
OSGi PresentationOSGi Presentation
OSGi Presentation
 
Intro To OSGi
Intro To OSGiIntro To OSGi
Intro To OSGi
 
Everything as a code
Everything as a codeEverything as a code
Everything as a code
 
Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...
Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...
Workshop: Know Before You Push 'Go': Using the Beaker Acceptance Test Framewo...
 
Java9 and the impact on Maven Projects (JFall 2016)
Java9 and the impact on Maven Projects (JFall 2016)Java9 and the impact on Maven Projects (JFall 2016)
Java9 and the impact on Maven Projects (JFall 2016)
 
How to Test Enterprise Java Applications
How to Test Enterprise Java ApplicationsHow to Test Enterprise Java Applications
How to Test Enterprise Java Applications
 
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
 
On-Demand Image Resizing Extended - External Meet-up
On-Demand Image Resizing Extended - External Meet-upOn-Demand Image Resizing Extended - External Meet-up
On-Demand Image Resizing Extended - External Meet-up
 
Spocktacular testing
Spocktacular testingSpocktacular testing
Spocktacular testing
 

Similar to The history of testing framework in Ruby

Ensuring OpenStack Version up Compatibility for CloudOpen Japan 2013-05-31
Ensuring OpenStack Version up Compatibility for CloudOpen Japan 2013-05-31Ensuring OpenStack Version up Compatibility for CloudOpen Japan 2013-05-31
Ensuring OpenStack Version up Compatibility for CloudOpen Japan 2013-05-31Masayuki Igawa
 
Kubernetes your tests! automation with docker on google cloud platform
Kubernetes your tests! automation with docker on google cloud platformKubernetes your tests! automation with docker on google cloud platform
Kubernetes your tests! automation with docker on google cloud platformLivePerson
 
Heavenly hell – automated tests at scale wojciech seliga
Heavenly hell – automated tests at scale   wojciech seligaHeavenly hell – automated tests at scale   wojciech seliga
Heavenly hell – automated tests at scale wojciech seligaAtlassian
 
Qtp-training A presentation for beginers
Qtp-training  A presentation for beginersQtp-training  A presentation for beginers
Qtp-training A presentation for beginersDhavamani Prakash
 
Transforming the Ceph Integration Tests with OpenStack
Transforming the Ceph Integration Tests with OpenStack Transforming the Ceph Integration Tests with OpenStack
Transforming the Ceph Integration Tests with OpenStack Ceph Community
 
The details of CI/CD environment for Ruby
The details of CI/CD environment for RubyThe details of CI/CD environment for Ruby
The details of CI/CD environment for RubyHiroshi SHIBATA
 
Containerised Testing at Demonware : PyCon Ireland 2016
Containerised Testing at Demonware : PyCon Ireland 2016Containerised Testing at Demonware : PyCon Ireland 2016
Containerised Testing at Demonware : PyCon Ireland 2016Thomas Shaw
 
Level Up Your Integration Testing With Testcontainers
Level Up Your Integration Testing With TestcontainersLevel Up Your Integration Testing With Testcontainers
Level Up Your Integration Testing With TestcontainersVMware Tanzu
 
How to develop the Standard Libraries of Ruby?
How to develop the Standard Libraries of Ruby?How to develop the Standard Libraries of Ruby?
How to develop the Standard Libraries of Ruby?Hiroshi SHIBATA
 
Parallelizing CI using Docker Swarm-Mode
Parallelizing CI using Docker Swarm-ModeParallelizing CI using Docker Swarm-Mode
Parallelizing CI using Docker Swarm-ModeAkihiro Suda
 
Tempest scenariotests 20140512
Tempest scenariotests 20140512Tempest scenariotests 20140512
Tempest scenariotests 20140512Masayuki Igawa
 
Ruby Throwdown Hosted by Engine Yard
Ruby Throwdown Hosted by Engine YardRuby Throwdown Hosted by Engine Yard
Ruby Throwdown Hosted by Engine YardJacob Lehrbaum
 
OpenStack Tempest and REST API testing
OpenStack Tempest and REST API testingOpenStack Tempest and REST API testing
OpenStack Tempest and REST API testingopenstackindia
 
Developing a user-friendly OpenResty application
Developing a user-friendly OpenResty applicationDeveloping a user-friendly OpenResty application
Developing a user-friendly OpenResty applicationThibault Charbonnier
 
No Va Taig April 7 2010
No Va Taig April 7 2010No Va Taig April 7 2010
No Va Taig April 7 2010rudy regner
 
Introduction to tempest
Introduction to tempest Introduction to tempest
Introduction to tempest openstackindia
 
Say Goodbye to Flaky Selenium Tests
Say Goodbye to Flaky Selenium TestsSay Goodbye to Flaky Selenium Tests
Say Goodbye to Flaky Selenium TestsTechWell
 
Escaping Automated Test Hell - One Year Later
Escaping Automated Test Hell - One Year LaterEscaping Automated Test Hell - One Year Later
Escaping Automated Test Hell - One Year LaterWojciech Seliga
 
Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0Hiroshi SHIBATA
 

Similar to The history of testing framework in Ruby (20)

Ensuring OpenStack Version up Compatibility for CloudOpen Japan 2013-05-31
Ensuring OpenStack Version up Compatibility for CloudOpen Japan 2013-05-31Ensuring OpenStack Version up Compatibility for CloudOpen Japan 2013-05-31
Ensuring OpenStack Version up Compatibility for CloudOpen Japan 2013-05-31
 
Kubernetes your tests! automation with docker on google cloud platform
Kubernetes your tests! automation with docker on google cloud platformKubernetes your tests! automation with docker on google cloud platform
Kubernetes your tests! automation with docker on google cloud platform
 
Heavenly hell – automated tests at scale wojciech seliga
Heavenly hell – automated tests at scale   wojciech seligaHeavenly hell – automated tests at scale   wojciech seliga
Heavenly hell – automated tests at scale wojciech seliga
 
Qtp-training A presentation for beginers
Qtp-training  A presentation for beginersQtp-training  A presentation for beginers
Qtp-training A presentation for beginers
 
Transforming the Ceph Integration Tests with OpenStack
Transforming the Ceph Integration Tests with OpenStack Transforming the Ceph Integration Tests with OpenStack
Transforming the Ceph Integration Tests with OpenStack
 
The details of CI/CD environment for Ruby
The details of CI/CD environment for RubyThe details of CI/CD environment for Ruby
The details of CI/CD environment for Ruby
 
Three Ruby usages
Three Ruby usagesThree Ruby usages
Three Ruby usages
 
Containerised Testing at Demonware : PyCon Ireland 2016
Containerised Testing at Demonware : PyCon Ireland 2016Containerised Testing at Demonware : PyCon Ireland 2016
Containerised Testing at Demonware : PyCon Ireland 2016
 
Level Up Your Integration Testing With Testcontainers
Level Up Your Integration Testing With TestcontainersLevel Up Your Integration Testing With Testcontainers
Level Up Your Integration Testing With Testcontainers
 
How to develop the Standard Libraries of Ruby?
How to develop the Standard Libraries of Ruby?How to develop the Standard Libraries of Ruby?
How to develop the Standard Libraries of Ruby?
 
Parallelizing CI using Docker Swarm-Mode
Parallelizing CI using Docker Swarm-ModeParallelizing CI using Docker Swarm-Mode
Parallelizing CI using Docker Swarm-Mode
 
Tempest scenariotests 20140512
Tempest scenariotests 20140512Tempest scenariotests 20140512
Tempest scenariotests 20140512
 
Ruby Throwdown Hosted by Engine Yard
Ruby Throwdown Hosted by Engine YardRuby Throwdown Hosted by Engine Yard
Ruby Throwdown Hosted by Engine Yard
 
OpenStack Tempest and REST API testing
OpenStack Tempest and REST API testingOpenStack Tempest and REST API testing
OpenStack Tempest and REST API testing
 
Developing a user-friendly OpenResty application
Developing a user-friendly OpenResty applicationDeveloping a user-friendly OpenResty application
Developing a user-friendly OpenResty application
 
No Va Taig April 7 2010
No Va Taig April 7 2010No Va Taig April 7 2010
No Va Taig April 7 2010
 
Introduction to tempest
Introduction to tempest Introduction to tempest
Introduction to tempest
 
Say Goodbye to Flaky Selenium Tests
Say Goodbye to Flaky Selenium TestsSay Goodbye to Flaky Selenium Tests
Say Goodbye to Flaky Selenium Tests
 
Escaping Automated Test Hell - One Year Later
Escaping Automated Test Hell - One Year LaterEscaping Automated Test Hell - One Year Later
Escaping Automated Test Hell - One Year Later
 
Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0
 

More from Kouhei Sutou

RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowRubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowKouhei Sutou
 
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Kouhei Sutou
 
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowRubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowKouhei Sutou
 
Rubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアRubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアKouhei Sutou
 
Apache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかApache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかKouhei Sutou
 
Apache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory dataApache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory dataKouhei Sutou
 
Redmine検索の未来像
Redmine検索の未来像Redmine検索の未来像
Redmine検索の未来像Kouhei Sutou
 
Apache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataApache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataKouhei Sutou
 
Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Kouhei Sutou
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームKouhei Sutou
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムKouhei Sutou
 
MySQL 8.0でMroonga
MySQL 8.0でMroongaMySQL 8.0でMroonga
MySQL 8.0でMroongaKouhei Sutou
 
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Kouhei Sutou
 
MariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムMariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムKouhei Sutou
 
PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!Kouhei Sutou
 

More from Kouhei Sutou (20)

RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowRubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
 
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
 
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowRubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
 
Rubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアRubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェア
 
Apache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかApache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのか
 
Apache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory dataApache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory data
 
Apache Arrow 2019
Apache Arrow 2019Apache Arrow 2019
Apache Arrow 2019
 
Redmine検索の未来像
Redmine検索の未来像Redmine検索の未来像
Redmine検索の未来像
 
Apache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataApache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory data
 
Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6
 
Apache Arrow
Apache ArrowApache Arrow
Apache Arrow
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
 
Apache Arrow
Apache ArrowApache Arrow
Apache Arrow
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
 
MySQL 8.0でMroonga
MySQL 8.0でMroongaMySQL 8.0でMroonga
MySQL 8.0でMroonga
 
My way with Ruby
My way with RubyMy way with Ruby
My way with Ruby
 
Red Data Tools
Red Data ToolsRed Data Tools
Red Data Tools
 
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
 
MariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムMariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システム
 
PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!
 

The history of testing framework in Ruby

  • 1. The history of testing framework in Ruby Powered by Rabbit 2.1.9 The history of testing framework in Ruby Kouhei Sutou ClearCode Inc. RubyKaigi 2015 2015-12-12
  • 2. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Silver sponsor
  • 3. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Goal 目標 You know about /Atest.+unitz/i /Atest.+unitz/iを知ること
  • 4. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Test テスト Which Rubies do include /Atest.+unitz/i? /Atest.+unitz/iを含んでいるRubyはどれでしょう? 1.4 1.6 1.8 1.9.1 1.9.2 1.9.3 2.0 2.1 2.2 2.3
  • 5. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Answer 答え Which Rubies do include /Atest.+unitz/i? /Atest.+unitz/iを含んでいるRubyはどれでしょう? 1.4 1.6 1.8 1.9.1 1.9.2 1.9.3 2.0 2.1 2.2 2.3
  • 7. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Characters 登場人物 testsupp RubyUnit Lapidary Test::Unit test/unit test-unit minitest RSpec
  • 8. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Ruby 1.3 times Ruby 1.3の時代 1998-1999✓ The first testing framework for Ruby was released 最初のRuby用のテスティングフレームワークがリリース testsupp✓ ✓
  • 9. The history of testing framework in Ruby Powered by Rabbit 2.1.9 testsupp 1999-4-11: [ruby-talk:00634] ANN: testsupp.rb 0.1 ✓ Perl's Test like API PerlのTestモジュールのようなAPI Perl's Test exists since 1998 PerlのTestモジュールは1998からある ✓ ✓
  • 10. The history of testing framework in Ruby Powered by Rabbit 2.1.9 testsupp: API require "testsupp" include TestSupp start_tests ok "Hello" == "Hello" end_tests
  • 11. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Ruby 1.4 times Ruby 1.4の時代 1999-2000✓ The first xUnit testing framework for Ruby was released 最初のRuby用のxUnit系テスティングフレームワークが リリース RubyUnit✓ ✓
  • 12. The history of testing framework in Ruby Powered by Rabbit 2.1.9 RubyUnit Since 1999-11-20 at least 少なくとも1999年11月20日には存在していた [ruby-list:18594] "RubyUnit のページは当分更新されないと思うです." ✓ ✓ The first xUnit testing framework for Ruby 最初のRuby用のxUnit系テスティングフレームワーク ✓
  • 13. The history of testing framework in Ruby Powered by Rabbit 2.1.9 FYI: XP 参考情報:XP eXtream Programing✓ The first XP book was published at 1999 最初のXPの本は1999年に出版 ✓ xUnit was born from XP xUnitはXPが生み出した ✓
  • 14. The history of testing framework in Ruby Powered by Rabbit 2.1.9 RubyUnit: API require "runit/testcase" class TestCalc < RUNIT::TestCase def test_add assert_equal(3, 1 + 2) end end
  • 15. The history of testing framework in Ruby Powered by Rabbit 2.1.9 RubyUnit: Impression 感想 Ruby-ish Rubyっぽい
  • 16. The history of testing framework in Ruby Powered by Rabbit 2.1.9 RubyUnit: FYI RubyUnit:参考情報 Test generator exists テストジェネレーターがある ✓ Test exec command exists テスト実行コマンドがある ✓ rubyunit gem exists since 2014-10-12 rubyunitというgemが2014年10月12日から存在する Not related product 関係のないプロダクト ✓ ✓
  • 17. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Ruby 1.6 times: 1 Ruby 1.6の時代:1 2000-2002✓ The second xUnit testing framework for Ruby was released 2つ目のRuby用のxUnit系テスティングフレームワークが リリース Lapidary✓ ✓
  • 18. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Lapidary The first release was 2001-03-20 最初のリリースは2001年3月20日 ✓ The second xUnit testing framework for Ruby 2つ目のRuby用のxUnit系テスティングフレームワーク Maybe たぶん ✓ ✓
  • 19. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Lapidary: API require "Lapidary/TestCase" class TC_Adder < Lapidary::TestCase def testAdd assertEqual(3, 1 + 2) end end
  • 20. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Lapidary: Impression 感想 Not Ruby-ish Rubyっぽくない
  • 21. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Lapidary: FYI 参考情報 Has GUI test runner GUIのテスト実行機能アリ ✓
  • 22. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Ruby 1.6 times: 2 Ruby 1.6の時代:2 Started trying to bundle a testing framework to Ruby テスティングフレームワークをRubyにバンドルする 試みを開始 RubyUnit + Lapidary = Test::Unit✓ ✓
  • 23. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Test::Unit Since 2002-02: [ruby-talk:34744] ✓ The first /Atest.+unitz/i 最初の/Atest.+unitz/i ✓ The author is the author of Lapidary Lapidaryの作者が作者 ✓
  • 24. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Test::Unit: API require "test/unit" class TC_Adder < Test::Unit::TestCase def test_add assert_equal(3, 1 + 2) end end
  • 25. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Test::Unit: Impression 感想 Ruby-ish Rubyっぽい
  • 26. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Test::Unit: FYI 1 参考情報1 API is based on RubyUnit APIはRubyUnitのよう Has RubyUnit compatible API RubyUnit互換APIアリ ✓ ✓ Impl. is based on Lapidary 実装はLapidaryベース Has GUI test runner GUIのテスト実行機能アリ ✓ ✓
  • 27. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Wrap up: Before Ruby 1.8 Ruby 1.8の前までのまとめ testsupp: Perl like API✓ RubyUnit: Ruby-ish xUnit✓ Lapidary: Not Ruby-ish xUnit✓ Test::Unit: RubyUnit API + Lapidary Impl.✓ ✓
  • 28. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Ruby 1.8 times: 1 Ruby 1.8の時代:1 2003-2013✓ Ruby bundled a testing framework Rubyがテスティングフレームワークをバンドルした Test::Unit aka test/unit バンドルされたのはTest::Unit test/unitとも呼ばれる ✓ ✓
  • 29. The history of testing framework in Ruby Powered by Rabbit 2.1.9 FYI: Why test/unit? 参考情報:なぜtest/unitと呼ぶか require "test/unit"
  • 30. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Ruby 1.8 times: 2 Ruby 1.8の時代:2 RSpec was born RSpec誕生
  • 31. The history of testing framework in Ruby Powered by Rabbit 2.1.9 RSpec Since 2005-08✓ Tool for Behavior Driven Development 振る舞い駆動開発用のツール ✓ Active development 開発は活発 ✓
  • 32. The history of testing framework in Ruby Powered by Rabbit 2.1.9 RSpec 0.1.0: API # 2005-08 require "spec" class SpecAdd < Spec::Context def add (1 + 2).should_equal 3 end end
  • 33. The history of testing framework in Ruby Powered by Rabbit 2.1.9 RSpec: 1.0.0: API # 2007-05 require "spec" describe "Add" do it "should support positive + positive" do (1 + 2).should == 3 end end
  • 34. The history of testing framework in Ruby Powered by Rabbit 2.1.9 RSpec 1.0.0: Impression 感想 Engl-ish 英語っぽい
  • 35. The history of testing framework in Ruby Powered by Rabbit 2.1.9 RSpec: FYI 参考情報 Test exec command exists テスト実行コマンドがある RubyUnit like RubyUnitみたい ✓ ✓ More features than Test::Unit Test::Unitより機能が多い Mock, Not implemented, ... モックや未実装など ✓ ✓
  • 36. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Test::Unit in Ruby 1.8 Ruby 1.8バンドル後のTest::Unit No active development 開発は停滞 ✓ Maintainer was changed メンテナー交代 The author of minitest 後のminitestの作者 ✓ ✓
  • 37. The history of testing framework in Ruby Powered by Rabbit 2.1.9 RSpec and Test::Unit RSpec is getting better but Test::Unit isn't changed... RSpecはよくなっているのにTest::Unitは変わらない。。。 ✓ Test::Unit should also be getting better! Test::Unitももっとよくしたい! ✓
  • 38. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Test::Unit: new maintainer 新しいメンテナー New maintainer said: 新メンテナー曰く Can't maintain Test::Unit because it's too complex Test::Unitは複雑すぎてメンテナンスできない ✓ ✓
  • 39. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Wrap up: Ruby 1.8 times Ruby 1.8時代のまとめ Ruby started bundling Test::Unit (/Atest.+unitz/i) RubyがTest::Unitのバンドルを始めた But Test::Unit was died... バンドル後、Test::Unitは死んだ。。。 ✓ ✓ RSpec was born and active RSpecが生まれ、活発だった ✓
  • 40. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Ruby 1.9 times Ruby 1.9の時代 2009-2014✓ Ruby dropped Test::Unit RubyがTest::Unitを捨てた Because Test::Unit is too complex for new maintainer 新メンテナーにはTest::Unitは複雑すぎるから ✓ ✓
  • 41. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Test::Unit → test-unit Released as test-unit gem test-unit gemとしてリリース Still /Atest.+unitz/i 名前変更後も/Atest.+unitz/i ✓ test-unit 1.2.3 == Test::Unit in Ruby 1.8✓ ✓ Maintainer was changed メンテナー交代 Me 私 ✓ ✓
  • 42. The history of testing framework in Ruby Powered by Rabbit 2.1.9 test-unit Since 2008-03✓ Active development 開発は活発 ✓ High backward compatibility 高い後方互換性 Exception: Inheritance 例外:継承時の挙動 ✓ ✓
  • 43. The history of testing framework in Ruby Powered by Rabbit 2.1.9 minitest Since 2008-10✓ Active development 開発は活発 ✓ The author is the new maintainer of Test::Unit 作者はTest::Unitの新メンテナー ✓
  • 44. The history of testing framework in Ruby Powered by Rabbit 2.1.9 minitest and Test::Unit Mini, simple, clean and fast 小さくてシンプルでキレイで速い ✓ The author said: 作者曰く 100% Test::Unit compatible Test::Unitと100%互換 ✓ But it's not compat in fact... 実際は互換ではなかった。。。 ✓ ✓
  • 45. The history of testing framework in Ruby Powered by Rabbit 2.1.9 test/unit in Ruby 1.9 Provide Test::Unit API Test::Unit互換APIを提供 ✓ Wrapper of minitest minitestのラッパー Ruby developers developed it not minitest author minitestの作者ではなくRuby開発者が開発 ✓ ✓ Not Test::Unit but /Atest.+unitz/i Test::Unitではないが/Atest.+unitz/iではある ✓
  • 46. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Wrap up: Ruby 1.9 times Ruby 1.9時代のまとめ Ruby dropped Test::Unit RubyがTest::Unitを捨てた Test::Unit → test-unit gem✓ ✓ Ruby bundled minitest Rubyはminitestをバンドルした ✓ Ruby created test/unit (test/unit provided Test::Unit API) RubyはTest::Unit APIを提供するtest/unitを新しく作った ✓
  • 47. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Ruby 2.0 times Ruby 2.0の時代 2013-✓ No highly important things 特筆すべきことはない test-unit, minitest and RSpec were actively developed test-unitもminitestもRSpecも活発に開発が進んでいた ✓ ✓
  • 48. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Ruby 2.1 times: 1 Ruby 2.1の時代:1 2013-✓ minitest 5 introduced incompatible changes minitest 5で非互換の変更が入った ✓
  • 49. The history of testing framework in Ruby Powered by Rabbit 2.1.9 minitest 5 test/unit maintainer said: test/unitメンテナー曰く Can't maintain test/unit with minitest 5 minitest 5向けのtest/unitはメンテナンスできない ✓ ✓ test/unit for minitest was dropped minitestのラッパーとしてのtest/unitを捨てた ✓
  • 50. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Is no test/unit problem? test/unitがないことは問題なのか? Ruby used test/unit for Ruby's tests RubyはRubyのテストにtest/unitを使っていた No test/unit means existing tests can't be worked test/unitがなくなると既存のテストが動かない ✓ ✓
  • 51. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Solution idea: 1 解決案:1 Keep bundling and using minitest 4 minitest 4のバンドルを継続し、使い続ける Users will be confused because the latest Ruby doesn't bundle the latest minitest 最新のRubyに最新のminitestがバンドルされていないと ユーザーは混乱しそう ✓ ✓
  • 52. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Solution idea: 2 解決案:2 Bundle the latest minitest 最新のminitestをバンドルする Ruby uses minitest 4 and test/ unit for its tests Rubyのテストにはminitest 4とtest/unitを使う ✓ ✓ Accepted!
  • 53. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Note for idea 2 案2の補足 Need to care existing Test::Unit API users 既存のTest::Unit APIユーザーをケアする必要がある Backward compat is important! 後方互換性は重要! ✓ ✓ Bundle test-unit gem too for Test::Unit API Test::Unit互換APIのためにtest-unit gemもバンドル ✓
  • 54. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Wrap up: Ruby 2.1 times Ruby 2.1時代のまとめ Ruby developers decided to maintain minitest 4 and test/ unit for Ruby's tests Ruby開発者はRubyのテスト用にminitest 4とtest/unitをメ ンテナンスすることを決めた ✓
  • 55. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Ruby 2.2 times: 1 Ruby 2.2の時代:1 2014-✓ Upgraded bundled minitest to 5 バンドルしているminitestを5に更新 Moved minitest 4 and test/unit to test/ minitest 4とtest/unitはtest/以下に移動 ✓ ✓
  • 56. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Upgraded minitest to 5 minitest 5に更新 - lib/minitest/*.rb + test/lib/minitest/*.rb - lib/test/unit.rb + test/lib/test/unit.rb - lib/test/unit/**/*.rb + test/lib/test/unit/**/*.rb
  • 57. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Ruby 2.2 times: 2 Ruby 2.2の時代:2 Bundled test-unit gem again for users 再びtest-unit gemをバンドル Ruby 1.9 dropped test-unit gem Ruby 1.9はtest-unit gemを捨てた ✓ ✓
  • 58. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Bundled test-unit again test-unitを再びバンドル test-unit gem provides: lib/test-unit.rb lib/test/unit.rb lib/test/unit/**/*.rb
  • 59. The history of testing framework in Ruby Powered by Rabbit 2.1.9 test/unit in Ruby 2.2 Ruby 2.2のtest/unit For Ruby developers Ruby開発者にとっては test/lib/test/unit✓ ✓ For users ユーザーにとっては lib/test/unit = test-unit gem✓ ✓
  • 60. The history of testing framework in Ruby Powered by Rabbit 2.1.9 FYI: test/lib/test/unit Includes useful features for Ruby's tests Ruby本体のテストに便利な機能が入っている Leak checker for file descriptor, thread, process... リークチェッカー:ファイルディスクリプターやスレッ ドのリークやゾンビプロセスを検出 ✓ Memory usage profiler メモリー使用量のプロファイラー ✓ ✓
  • 61. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Wrap up: Ruby 2.2 times Ruby 2.2時代のまとめ Bundled minitest 5 minitest 5をバンドル ✓ Bundled test-unit again 再びtest-unitをバンドル ✓ Ruby's tests used forked mintiest 4 and test/unit Rubyのテストはフォークしたminitest 4とtest/unitを使う ✓
  • 62. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Ruby 2.3 times Ruby 2.3の時代 2015-✓ No highly important things 特筆すべきことはない test-unit, minitest, test/lib/ test/unit and RSpec were actively developed test-unitもminitestもtest/lib/test/unitもRSpecも活 発に開発が進んでいた ✓ ✓
  • 63. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Wrap up: History: 1 歴史のまとめ:1 Ruby 1.4 and 1.6 didn't bundle any testing framework Ruby 1.4と1.6はテスティングフレームワークをバンドル していなかった ✓ Test::Unit was born in Ruby 1.6 times Ruby 1.6の時代にTest::Unitが生まれた The first /Atest.+unitz/i✓ ✓
  • 64. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Wrap up: History: 2 歴史のまとめ:2 Ruby 1.8 bundled Test::Unit Ruby 1.8はTest::Unitをバンドルした /Atest.+unitz/i in 1.8✓ ✓ Ruby 1.9 dropped Test::Unit and bundled minitest Ruby 1.9はTest::Unitを捨ててminitestをバンドルした ✓
  • 65. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Wrap up: History: 3 歴史のまとめ:3 Ruby 1.9 provided test/unit as a wrapper of minitest Ruby 1.9はminitestのラッパーとしてtest/unitを提供した test/unit provided Test::Unit compatible API test/unitはTest::Unitの互換APIを提供した ✓ /Atest.+unitz/i in 1.9✓ ✓
  • 66. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Wrap up: History: 4 歴史のまとめ:4 Ruby 2.0 is same as Ruby 1.9 Ruby 2.0の状況はRuby 1.9と変わらない test/unit is /Atest.+unitz/i in 2.0 つまり、2.0での/Atest.+unitz/iはtest/unit ✓ ✓
  • 67. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Wrap up: History: 5 歴史のまとめ:5 Ruby 2.1 didn't upgrade minitest to 5 Ruby 2.1はminitestを5に更新しなかった minitest 5 has backward incompatible changes minitest 5には後方非互換の変更があった ✓ They break Ruby's tests 非互換を受け入れるとRubyのテストが動かなくなる ✓ ✓
  • 68. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Wrap up: History: 6 歴史のまとめ:6 Ruby 2.2 upgraded minitest Ruby 2.2はminitestを5に更新した Dropped test/unit as minitest wrapper Ruby 2.2はminitestのラッパーのtest/unitを捨てた ✓ Used forked minitest 4 and test/ unit for its tests Ruby 2.2はRubyのテスト用にminitest 4のフォークと test/unitを使うことにした ✓ ✓
  • 69. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Wrap up: History: 7 歴史のまとめ:7 Ruby 2.2 bundled test-unit gem again Ruby 2.2はtest-unit gemを再びバンドルした /Atest.+unitz/i in 2.2✓ ✓
  • 70. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Wrap up: History: 8 歴史のまとめ:8 test/lib/test/unit was evolved for Ruby's tests test/lib/test/unitはRubyのテスト用に進化した /Atest.+unitz/i in 2.2 too✓ ✓
  • 71. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Wrap up: History: 9 歴史のまとめ:9 No highly important things in Ruby 2.3 Ruby 2.3には特筆すべきことはない ✓
  • 72. The history of testing framework in Ruby Powered by Rabbit 2.1.9 What's /Atest.+unitz/i /Atest.+unitz/iはなにか Test::Unit compatible API Test::Unit互換API
  • 73. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Test::Unit compat API Test::Unit互換API class XXXTest < Test::Unit::TestCase def test_xxx assert_equal(xxx, yyy) end end
  • 74. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Test::Unit API spirit Test::Unit APIの魂 Ruby-ish Rubyらしさ
  • 75. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Ruby-ish in Test::Unit Test::UnitでのRubyらしさ Write test as normal Ruby script 普通のRubyスクリプトのようにテストを書ける It's important in minitest too minitestもこれを大事にしている ✓ ✓
  • 76. The history of testing framework in Ruby Powered by Rabbit 2.1.9 By example: 1 実例:1 Grouping tests テストのグループ化 ↓ class
  • 77. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Group: 1 グループ化:1 class TestAdd < Test::Unit::TestCase def test_positive_positive assert_equal(3, 1 + 2) end def test_positive_negative assert_equal(-2, 1 + -3) end end
  • 78. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Group: 2 グループ化:2 class TestSub < Test::Unit::TestCase def test_positive_positive assert_equal(-2, 1 - 3) end def test_positive_negative assert_equal(4, 1 - -3) end end
  • 79. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Group: 3 グループ化:3 class TestCalc < Test::Unit::TestCase class TestAdd < self # TestAdd < TestCalc # def test_positive_positive # def test_positive_negative end class TestSub < self # TestAdd < TestCalc # def test_positive_positive # def test_positive_negative end end
  • 80. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Wrap up: Group: 1 グループ化のまとめ:1 Test case has tests テストケースは複数のテストを持つ Test case is class テストケースをクラスとして実装 ✓ Test is method テストをメソッドとして実装 ✓ Class has methods クラスは複数のメソッドを持つ ✓ ✓
  • 81. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Wrap up: Group: 2 グループ化のまとめ:2 Sub test case is sub class サブテストケースはサブクラスとして実装 Sub test case is-a parent test case TestAdd is a test case of TestCalc サブテストケースは親テストケースとis-aの関係 ✓ ✓
  • 82. The history of testing framework in Ruby Powered by Rabbit 2.1.9 FYI: Group 参考情報:グループ化 Test::Unit and minitest don't support sub test case is a sub class Test::Unitとminitestはサブクラスでサブテストケースを 作ることをサポートしていない ✓ test-unit only supports it test-unitだけがサポートしている It's the only one incompatible 唯一の非互換 ✓ ✓
  • 83. The history of testing framework in Ruby Powered by Rabbit 2.1.9 FYI: Group DSL 参考情報:グループ化DSL class TestCalc < Test::Unit::TestCase sub_test_case "+" do test "positive + negative" {} end sub_test_case "-" do test "positive - negative" {} end end test-unit feature
  • 84. The history of testing framework in Ruby Powered by Rabbit 2.1.9 By example: 2 実例:2 Share tests テストの共有 ↓ module
  • 85. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Share: 1 共有:1 module KVSTests def test_read_write @kvs[:key] = :value assert_equal(:value, @kvs[:key]) end end
  • 86. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Share: 2 共有:2 class TestKVSHash < Test::Unit::TestCase include KVSTests def setup; @kvs = {}; end end class TestKVSOpenStruct < Test::Unit::TestCase include KVSTests def setup; @kvs = OpenStruct.new; end end
  • 87. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Wrap up: Share 共有のまとめ Tests can be shared by module モジュールでテストを共有できる Module is used for sharing method implementations in Ruby Rubyではモジュールはメソッドの実装を共有するために 使われている ✓ ✓
  • 88. The history of testing framework in Ruby Powered by Rabbit 2.1.9 By example: 3 実例:3 Assertion アサーション ↓ Write as-is そのまま書く
  • 89. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Assert: Equal アサート:等価 def test_add assert_equal(3, 1 + 2) # ↑↓ as-is # RSpec: expect(1 + 2).to eq(3) end
  • 90. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Assert: Predicate アサート:述語 def test_exist_readme assert(File.exist?("README")) # ↑ as-is ↓ not as-is # RSpec: expect(File).to exist("README") end
  • 91. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Message from minitest 1) Failure: TestFile#test_exist_readme [test-file-minitest.rb:5]: Failed assertion, no message given. Less information
  • 92. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Message from RSpec 1) File README should exist Failure/Error: expect(File).to exist("README") expected File to exist # ./spec-file.rb:5:in `block (2 levels) in <top (required)>' Colorized and snippet
  • 93. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Message from test-unit Failure: <false> is not true. test_exist_readme(TestFile) test-file-test-unit.rb:5:in `test_exist_readme' 2: 3: class TestFile < Test::Unit::TestCase 4: def test_exist_readme => 5: assert(File.exist?("README")) 6: end 7: end Colorized and snippet
  • 94. The history of testing framework in Ruby Powered by Rabbit 2.1.9 power-assert def test_exist_readme assert do # ↓ as-is File.exist?("README") end end Built-in in test-unit
  • 95. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Message: power-assert Failure: File.exist?("README") | | | false File (NOTE: ← Receiver information) test_exist_readme(TestFile) /usr/lib/ruby/vendor_ruby/power_assert.rb:36:in `start' test-file-power-assert.rb:5:in `test_exist_readme' 2: 3: class TestFile < Test::Unit::TestCase 4: def test_exist_readme => 5: assert do 6: File.exist?("README") 7: end 8: end
  • 96. The history of testing framework in Ruby Powered by Rabbit 2.1.9 FYI: test-unit and power- assert Don't recommend "all power-assert" すべてpower-assertは非推奨 Recommend "power-assert only for predicate" 述語だけpower-assertを推奨 ✓ ✓
  • 97. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Assert: Equal # @group.users should return # sorted names of user assert_equal(user_names.sort, @group.users) # ↑ Align-able assert do @group.users == user_names.sort end
  • 98. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Align 縦に並べる Indicate compare targets visually 視覚的に比較対象ということを示す ✓ Clarify differences visually 視覚的に違いを明確にする ✓
  • 99. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Experiment: 1 実験:1 Find a difference! 違うところを探せ! Hello | Heilo
  • 100. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Experiment: 2 実験:2 Find a difference! 違うところを探せ! Hello Heilo
  • 101. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Align in Ruby Rubyで縦に並べる # Arguments are natural method(arg1, arg2) # Operands aren't natural operand1 == operand2 引数だと自然だけどオペランドだと不自然
  • 102. The history of testing framework in Ruby Powered by Rabbit 2.1.9 FYI: test-unit and power- assert Don't recommend "all power-assert" すべてpower-assertは非推奨 Recommend "power-assert only for predicate" 述語だけpower-assertを推奨 ✓ ✓
  • 103. The history of testing framework in Ruby Powered by Rabbit 2.1.9 FYI: Fixture 参考情報:フィクスチャー Ensure clean test environment キレイなテスト環境を用意する仕組み
  • 104. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Fixture: e.g. フィクスチャー:例 def setup; p :s; end def teardown; p :t; end def test_1; p :t1; end def test_2; p :t2; end # :s -> :t1 -> :t -> # :s -> :t2 -> :t
  • 105. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Fixture: Open file フィクスチャー:ファイルを開く def setup @file = File.open("x") end def teardown @file.close end
  • 106. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Fixture: Open file フィクスチャー:ファイルを開く Not Ruby-ish Rubyっぽくない
  • 107. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Fixture: Open File フィクスチャー:ファイルを開く def setup # Ruby-ish version File.open("x") do |file| @file = file yield end # Close file automatically end New feature in test-unit
  • 108. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Wrap up: Test::Unit API まとめ:Test::Unit API Ruby-ish is important in Test::Unit API Test::Unit APIではRubyらしいことは重要 ✓
  • 109. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Wrap up: Test::Unit API まとめ:Test::Unit API (Sub) test case by (sub) class (サブ)テストケースには(サブ)クラスを使う ✓ Share tests by module テストの共有にはモジュールを使う ✓ as-is in assert アサートではそのままの使い方で書く ✓
  • 110. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Wrap up: Test::Unit API まとめ:Test::Unit API More Ruby-ish さらにRubyっぽく Support block based fixture ブロックを使ったフィクスチャーもサポート ✓ ✓
  • 111. The history of testing framework in Ruby Powered by Rabbit 2.1.9 Goal 目標 You know about /Atest.+unitz/i /Atest.+unitz/iを知ること