3

プロセスを自動化し、それ自体の結果に対していくつかのテストを実行してから、他のことを行うツールを構築しています。

コードをクリーンアップしようとして、テストケースクラスだけを持つ別のファイルを作成しました。これらのテストを実行する前に、いくつかのパラメーター/オブジェクトをクラスに渡してから実行する必要があります。問題は、パラメーター/オブジェクトをテストクラスに渡す方法が見つからないように見えることです。

現在、Yaml ファイルを生成してテスト クラスで読み取ることを考えていますが、これに一時ファイルを使用するのは「間違っている」と感じています。誰かがより良い解決策を持っているなら、それは素晴らしいでしょう!

**************編集************

私が今行っていることのコード例:

#!/usr/bin/ruby
require 'test/unit/ui/console/testrunner'
require 'yaml'
require 'TS_SampleTestSuite'

automatingSomething()
importantInfo = getImportantInfo()

File.open('filename.yml', 'w') do |f|
    f.puts importantInfo.to_yaml
end

Test::Unit::UI::Console::TestRunner.run(TS_SampleTestSuite)

上記の例では、TS_SampleTestSuite が重要な情報を必要とするため、最初の「テスト ケース」は、Yaml ファイル filname.yml から情報を読み取るだけのメソッドです。

混乱が解消されることを願っています。

4

2 に答える 2

0

まず、Cameron の意見に同意します。このコードは間違いなく Ruby のやり方に準拠していません。

これを起動して実行する最も速い方法は、特にこのデータがほとんど不変である場合 (つまり、テストで変更されない場合)、値を定数に割り当てることです。したがって、変数importantInfoに名前を付ける代わりに、名前を付けますIMPORTANT_INFO。その後、テストで使用できるようになります。それは間違いなくきれいな解決策ではありません。そのようなグローバル設定が必要なテストの匂いと見なすことさえできると思いますが、それはあなたのためにあります.

または、 をスタブ化することもできます。これによりimportantInfo、実際には、よりクリーンで読みやすいテストが提供されると思います。

于 2009-01-01T19:19:33.687 に答える
0

全体として、単体テストを非常にルビっぽい方法で実際に使用していないように見えますが、それはしばらく脇に置いておきます。

基本的な問題は、テストを実行する前に必要なセットアップがあることです。これを行う通常の方法は、テスト ユニット ケース自体内の setup メソッドを使用することです。

class UserTest < TestUnit::TestCase

  def setup
    # do your important calculation
  end

  def test_success
    #.. assert some things
  end
end

ここで実際にテストしているコードが何であるかを考えて、それを分解して、より詳細な方法で、より多くのテストでテストできるかどうかを確認します。

于 2008-11-14T00:06:19.857 に答える