2016-09-06 7 views
0

私は、たくさんのテスト(数千回の呼び出しでユニットテストの機能を呼び出す)が必要な機能を持つ、レールプロジェクトに取り組んでいます。私はちょうど結果をアサートする簡単な方法を探しています(たとえば、assert(class.foo(params)> 0.6、true)fooの結果が0.6より大きいかどうかを調べる)、そしておそらく合格しなかった。Ruby on Railsでのアサート - 簡単な方法はありますか?

私はC \ C++プログラミングのこの種のユニットテストに慣れていましたが、レールで同様のソリューションを探していましたが、関数内で各アサーションをカプセル化しなければならない "MiniTest" (def \ assertion \ end)。これはコードの長さを3倍にし、プロセス全体をシスキーにしてコードを読むことができなくします。

ボトムライン:私は私のクラスの新しいインスタンスを作成するための方法を探しています 、I = my_class.new、 は、多くのアサーションが続く:アサート(i.foo(のparams)< 0.6、真) 。テストが失敗した場合は、正確な行について通知を受けることをお勧めします。

ありがとうございます!

答えて

0

私はMiniTestについてはわかりませんが、RSpec(別の一般的なテストフレームワーク)はエラーを集約する能力を持っています。だから、あなたはもはや "仕様ごとに1つのアサーション"ルールに従う必要はありません。例:

RSpec.describe 'my big function' do 
    it 'does some stuff' do 
    expect(foo(params)).to be > 0.6 
    expect(bar(params)).to be < 0.4 
    end 
end 

複数の障害が発生した場合は、詳細なレポートが表示され、期待していなかった正確な行が示されます。 minitestについては

+0

こんにちはセルジオなどのチェックに返信するためのおかげで、複数のアサーションを行うことができます。 私はRSpecを使用することはできませんが、テスト後に使用したデータベースを拭くように設定されているので、私のニーズに合っていません。私は、一時的な場所に使用してデータベースをコピーし、それにRSpecを使用することができますが、それはあまりにも多くの時間がかかります。 RSpecの設定を変更することは、私と私の同僚(彼らはこの設定に依存している)に大きな頭痛を引き起こさずには不可能です。とにかくありがとう! –

0

あなたは、この

require 'test_helper' 

class ListTest < ActiveSupport::TestCase 
    context "test my object" do 
    setup do 
     @my_object = MyObject.new 
    end 

    should 'be greater than .6 and title equal to blah' do 
     assert @my_object.value > 0.6 
     assert_equal @my_object.title, 'blah' 
    end 
    end 
end 
+0

こんにちは、Martin、 セットアップを使用すると、新しいオブジェクトが作成されるようになりますが、すべてのテストで同じオブジェクトを使用する必要があります。私はそれを見て覚えて、MiniTestフレームワーク内でそうするオプションを見つけることができませんでした。 私は、 "should"のことについて多くのアサーションについて知りませんでしたが、その後のレポートが失敗した正確な行\アサーションを指し示しているのであれば分かりますか? ありがとう! –

+0

@BenLiderman:この設定では、最初の失敗で停​​止し、それ以上は進まないと思います。 –

+0

@BenLiderman結果に正確なファイルと行番号が表示されます。それは最初の失敗にぶつかった後にはずれるでしょう。コンテキスト外で設定を移動してみることもできますが、毎回新しいオブジェクトを作成すると思います。あなたはそれぞれの終わりにそれをdbに永続化してから再ロードすることができます。 –

関連する問題