カスタマイズで Ruby 単体テストを実行するカスタム ツールを作成しようとしています。
私がする必要があるのは、特定のファイルから(requireなどを介して)特定のTestCaseをロードし、計算と初期化を行った後に実行することです。
問題は、「test/unit」とテストケースが必要な瞬間にすぐに実行されることです。
これで何ができますか?
ありがとう。
カスタマイズで Ruby 単体テストを実行するカスタム ツールを作成しようとしています。
私がする必要があるのは、特定のファイルから(requireなどを介して)特定のTestCaseをロードし、計算と初期化を行った後に実行することです。
問題は、「test/unit」とテストケースが必要な瞬間にすぐに実行されることです。
これで何ができますか?
ありがとう。
ファイルの内容を通常のテキストファイルとして読み取り、eval
発言内容を初期化/計算した後、その内容を処理するのはどうですか?ニーズには不十分な場合があり、テストフレームワークの手動セットアップと実行が必要になる場合があります。
そのように(私はファイルを読む代わりにヒアドキュメントを置きます)。基本的に、コンテンツはテストケースコードを含む単なる文字列です。
content = <<TEST_CASE
class YourTestCase
def hello
puts 'Hello from eval'
end
end
YourTestCase.new.hello
TEST_CASE
eval content
eval
注:別の方法がある場合は使用したくありませんが。eval
文字列から任意の言語で手動でコードを作成する場合は、特に注意する必要があります。
1.9 を実行していて、1.9 の test/unit は MiniTest の単なるラッパーであるため、次のアプローチが機能するはずです。
次のようなもの ( EndOfLine Custom Test Runnerからの恥知らずなプラグイン、Ruby 1.9 に調整):
fastfailrunner.rb:
require 'test/unit'
class FastFailRunner19 < MiniTest::Unit
def _run args = []
puts "fast fail runner"
end
end
~
example_test.rb:
require 'test/unit'
class ExampleTest < Test::Unit::TestCase
def test_assert_equal
assert_equal 1, 1
end
def test_lies
assert false
end
def test_exceptions
raise Exception, 'Beware the Jubjub bird, and shun the frumious Bandersnatch!'
end
def test_truth
assert true
end
end
run.rb:
require_relative 'fast_fail_runner'
require_relative 'example_test'
MiniTest::Unit.runner= FastFailRunner19.new
これを実行すると
ruby run.rb
何もしないカスタム FastFailRunner19 が使用されます。
実行を延期したいテスト ケースを収集し、それらを配列に格納できます。その後、ブロック実行コードを作成します。例えば:
test_files = ['test/unit/first_test.rb'] #=> Testcases you want to run
test_block = Proc.new {spec_files.each {|f|load f} } #=> block storing the actual execution of those tests.
これらのテストケースを呼び出す準備ができたら、あとはtest_block.call
.
少し一般化すると、コードの実行を延期または遅延することを考えるとclosures
、非常に洗練された柔軟な代替手段になります。