0

次のコードがあるとします。

require 'minitest/autorun'
require '<some other stuff>

class test <  MiniTest::Unit::TestCase
  def setup
<setup some stuff>
  end
  def teardown
     <teardown some stuff>
  end

  def test1
    <test1 code>
  end
  def test2
    <test2 code>
  end
end

minitest が初期設定を使用して test1 と test2 の両方を実行するようにするにはどうすればよいですか? 私が尋ねている理由は、セットアップが Selenium Webdriver インスタンスをインスタンス化し、ログイン/セットアップに時間がかかるためです。(毎回新しいインスタンスをインスタンス化するのではなく) 同じインスタンスを使用して時間を短縮したいからです。機能をテストします。

4

4 に答える 4

3

この質問には、私が対処しようとする多くの仮定があります。まず、Minitest はテストを並行して実行しません。デフォルトでは、Minitest はランダムな順序でテストを実行します。test_orderテスト クラスのメソッドをオーバーライドすることで、テストの実行順序を変更できます。

class MyTest <  MiniTest::Unit::TestCase
  def self.test_order
    :sorted # Or :alpha, they both behave the same
  end
end

しかし、それはあなたが求めていると私が思うものにはなりません。これtest1は常に の前に実行されるようにするだけtest2です。これは、テストを順番に実行する必要があるように記述した場合にのみ役立ちます。(アルファベット順であり、クラスで定義されている順序とは限りません。)

テスト クラス内のインスタンス変数は、テスト間で共有されません。つまり、が実行されるインスタンスとはtest1異なるインスタンスで実行されます。テスト間でオブジェクトを共有するには、オブジェクトをグローバル変数またはクラス変数に設定する必要があります。MyTesttest2

class MyTest <  MiniTest::Unit::TestCase
  def setup
    @@this_thing ||= begin
      # Really expensive operation here
    end
  end
end

お役に立てれば。

于 2013-09-10T19:47:27.060 に答える
0

Minitest が必要ですか、それとも test-unit に変更できますか?

test-unit では、'Test::Unit::TestCase.startup andTest::Unit::TestCase.shutdown'を使用できます。

gem 'test-unit'#, '>= 2.1.1' #startup
require 'test/unit'
#~ require '<some other stuff>

class MyTest <  Test::Unit::TestCase
  def self.startup
    puts '<setup some stuff>'
  end
  def self.shutdown
     puts '<teardown some stuff>'
  end

  def test1
    puts '<test1 code>'
  end
  def test2
    puts '<test2 code>'
  end
end

Ruby 1.9.2 でテスト ユニットの起動が機能しないも参照してください。

于 2013-08-21T18:44:38.953 に答える
0

テストの観点からは悪い考えですが、

1 つのテストで両方のテストを実行し、セットアップを再利用できます。

または、セットアップとティアダウンから取り出して、ヘルパー メソッドを追加してセットアップし、テストからそれを呼び出します。実行される最初のテストはヒットを取得し、他のテストはそれを再利用します。

ただし、ユニット テストではモックまたはスタブを作成し、実際の作業は統合テストに任せてください。

于 2013-08-21T16:39:39.647 に答える