scivola
@scivola

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

test-unit vs. minitest

Ruby のテストライブラリーとして test-unitminitest のどちらが良いと思われますか。
特徴を具体的に挙げて論じてください。
あるいは「どちらが良い」には答えず,考える材料のご提供だけでもけっこうです。

4

@studio15 さん

rspecは除くという前提でしょうか?

はい。「Ruby のテストライブラリーは何が良いか」という問いではありません。

test-unit と minitest は同じルーツを持ち,ほとんど同じような書き方,使い方をしますが,ややこしい歴史的経緯により二つに分裂したまま今日に至っており,現在の Ruby ではどちらも bundled gem という地位を与えられています。
浄土真宗が本願寺派(西本願寺)と真宗大谷派(東本願寺)に分かれているようなものでしょうか。いや違うな。
それはともかく,「この系統のテストライブラリーとしてはどちらが良いだろうか」という問いです。

いや「どちらが良い」といっても火薬庫の中を松明で照らしたいわけではなく,それぞれの特徴をよく知りたいということと,そのうえで長所短所を考えたり,いろいろな人の考えに触れたい,ということ(のつもり)です。

1Like

Unit testsとspecsの比較ではなく、Unit testsを書くのにtest/unitminitest/testのどちらを使うべきかと言う話ですか…。

えと、私は(rspecではなく)minitest/specを推しなので、minitest/testに一票でお願いします。

0Like

機能的な差、わかりません。(そもそも私テストちゃんと書けないし)
かいはつしゃの方は、いずれも大変なカリスマの持ち主だと思います
あとは信仰のもんだいだと思います。
こんな回答で良いのかしらん

0Like

@raccy さんのお答えの意味が全然理解できていませんでした(よく分からなかったので反応できませんでした)。

昨日おぼろげに知ったのですが,minitest ライブラリーって,

  • test-unit ライブラリーと同様の assert 系メソッドを使う書き方
  • RSpec 風な書き方

の二通りの書き方ができるんですね。
で,@raccy さんが「minitest/specを推し」というのは後者を推している,ということなんですね?
(この解釈が間違ってたら教えてください)

0Like

@kojix2 さん
はい,あのう,信仰の問題じゃないところのご意見などを伺いたいという問いなんです。

機能差としては,例えば test-unit は

def test_render_all_prefectures

end

みたいな書き方の他に

test "Render all prefectures" do

end

とか

test "全都道府県を描画" do

end

などと書けますが,minitest はできません(たぶん)。

Rails プログラマーは「えっ,できるけど?」というかもしれませんが,あれは ActiveSupport が minitest を魔改造しているからできるのであって,素の minitest の機能ではないはず。

また,test-unit は

def to_roman_1
  assert_equal "I", 1.to_roman
end

def to_roman_2
  assert_equal "II", 2.to_roman
end

def to_roman_3
  assert_equal "III", 3.to_roman
end

def to_roman_4
  assert_equal "IV", 4.to_roman
end

def to_roman_1
  assert_equal "MDCCCLXVIII", 1968.to_roman
end

の代わりに

data \
  "1": ["I", 1],
  "2": ["II", 2],
  "3": ["III", 3],
  "4": ["IV", 4],
  "1968": ["MDCCCLXVIII", 1968]

test "to_roman" do |data|
  expected, target = data
  assert_equal expected, target.to_roman
end

と書くいわゆる「データ駆動テスト」ができますが,minitest はできません(たぶん)。
※後者の書き方でもデータごとに独立のテストになっており,data メソッドに与えたハッシュのキーがテスト名になっています。

この二つから私は test-unit 推しなんですが,minitest のほうをよく分かっていないので,minitest 推しの方の知見が伺えればいいな,というのがこの問いの動機の一つでした。

3Like

よく

  • Ruby にはテスト文化がある。つか「テスト重要」ってそもそも Ruby 発祥だぜ(?)
  • Ruby は日本生まれで開発者も日本人が多いから日本語の情報が豊富

っていう話を聞きますよね。

そのわりには,標準添付ライブラリーで同系統のテストライブラリーが長らく二つに分裂したままってどうなのよ。
でもって,両者仲良く bundled gem1 に降格(?)されたせいで,公式リファレンスにはほとんど何も記述されておらず2,日本語で読めるリファレンスが存在しない,ってどうなのよ。

もうこの二点(つまり①分裂してて,②日本語リファレンスが無い)だけでも Ruby のテスト文化にとって大きな損失だとオラ思うだよ。

test-unit と minitest って合流する余地は無いんですかね。
いやまあ合流となると gem 名はどっちのにするんだ,という話になってまとまらないから,いっそ両 gem とも開発を中止しし,機能を統合した新 gem にして名称は投票で決めようとか,いやそもそも合流に反対の人もいるので分 gem するか,というような,どこかで聞いた話になるのかしらん?


  1. bundled gem って,たぶん Ruby に gem が同梱されているだけ,という意味だと思う。間違ってたら教えて。 

  2. それぞれ test/unitminitest/unit を参照のこと。 

3Like

Your answer might help someone💌