1

カスタマイズで Ruby 単体テストを実行するカスタム ツールを作成しようとしています。

私がする必要があるのは、特定のファイルから(requireなどを介して)特定のTestCaseをロードし、計算と初期化を行った後に実行することです。

問題は、「test/unit」とテストケースが必要な瞬間にすぐに実行されることです。

これで何ができますか?

ありがとう。

4

3 に答える 3

1

ファイルの内容を通常のテキストファイルとして読み取り、eval発言内容を初期化/計算した後、その内容を処理するのはどうですか?ニーズには不十分な場合があり、テストフレームワークの手動セットアップと実行が必要になる場合があります。

そのように(私はファイルを読む代わりにヒアドキュメントを置きます)。基本的に、コンテンツはテストケースコードを含む単なる文字列です。

content = <<TEST_CASE
  class YourTestCase

    def hello
      puts 'Hello from eval'
    end

  end
  YourTestCase.new.hello
TEST_CASE

eval content 

eval注:別の方法がある場合は使用したくありませんが。eval文字列から任意の言語で手動でコードを作成する場合は、特に注意する必要があります。

于 2013-03-11T11:59:06.217 に答える
1

1.9 を実行していて、1.9 の test/unit は MiniTest の単なるラッパーであるため、次のアプローチが機能するはずです。

  • 独自のカスタム ランナーを実装する
  • 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 が使用されます。

于 2013-03-11T12:55:06.443 に答える
0

実行を延期したいテスト ケースを収集し、それらを配列に格納できます。その後、ブロック実行コードを作成します。例えば:

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、非常に洗練された柔軟な代替手段になります。

于 2013-03-11T12:28:12.210 に答える