2

多数の Java 単体テストがあり、継続的なテスト フレームワークをコードベースに統合したいと考えています。理想的には、監視しているファイルが変更されるたびにテストの実行を開始する Maven / Ant ターゲットまたは bash スクリプトを作成したいと考えています。これまでにいくつかのオプション (Infinitest、JUnit Max) を見てきましたが、どちらも IDE プラグインとして実行する必要があるようです。

CLI 専用ツールを使用する動機は、同僚がさまざまなテキスト エディターと IDE を使用していることですが、誰でもテストを常に実行できるようにしたいと考えています。

編集:いくつかの理由から、Jenkins やその他のより典型的な CI ソリューションは考慮しませんでした。

  • プッシュのたびに単体テストと統合テストを実行するための CI ビルド ツールが既に用意されています。
  • それらはテストの実行時間を隠し (非同期で実行されるため)、人々が気付かないうちにテストがどんどん遅くなるのを許します。
  • 通常、リポジトリが中央の場所にある場合にのみテストを実行します。コードをどこかにプッシュした後ではなく、編集中に単体テストを実行したい。テストを実行するのが早ければ早いほど、編集中に犯した間違いをすぐに修正できます。私たちの JavaScript チームは同様のツールを気に入っており、単体テスト開発の反復処理が 3 倍高速化されたと述べています。
4

5 に答える 5

1

そのために、ディレクトリ変更ソリューションの継続的なポーリングを使用しています。(一般的なコード: http://www.qualityontime.eu/articles/directory-watcher/groovy-poll-watcher/ (ハンガリー語ですが、ソース コードは英語) )

nanoc ベースのサイトをコンパイルするためのカスタマイズされたソリューション。確認して、必要に応じてカスタマイズします。(グルーヴィー)

def job = {
  String  command = /java -jar jruby-nanoc2.jar -S nanoc compile/
  println "Executing "+command
  def proc = command.execute()
  proc.waitForProcessOutput(System.out, System.err)
}

params =  [
  closure: job,
  sleepInterval: 1000,
  dirPath: /R:\java\dev\eclipse_workspaces\project\help\content/
]

import groovy.transform.Canonical;

@Canonical
class AutoRunner{
  def closure
  def sleepInterval = 3000
  // running for 8 hours then stop automatically if checking every 3 seconds
  def nrOfRepeat = 9600 
  def dirPath = "."
  long lastModified = 0

  def autorun(){
    println "Press CTRL+C to stop..."
    println this
    def to_run = {
      while(nrOfRepeat--){
        sleep(sleepInterval)
        if(anyChange()){
          closure()
        }
      }
    } as Runnable
    Thread runner = new Thread(to_run)
    runner.start()
  }

  def boolean anyChange(){
    def max = lastModified
    new File(dirPath).eachFileRecurse {
      if(it.name.endsWith('txt') && it.lastModified() > max){
        max = it.lastModified()
      }
    }
    if(max > lastModified){
      lastModified = max
      return true
    }
    return false;
  }
}

new AutoRunner(params).autorun()
于 2014-05-05T11:22:10.113 に答える
0

ええ、ビルド サーバー (Bamboo、Cruise Control、TeamCity など) と Maven などのビルド ツール (TestNg/Junit 用の Surefire-plugin と、おそらく Selenium 2 などを使用した統合テスト用の Failsafe-plugin を含む) を持つことは非常に人気があります。セットアップは比較的簡単です (ほとんどそのままで動作します)。:)

于 2014-03-24T09:01:37.807 に答える
0

通常の方法は、 Jenkinsなどの継続的インテグレーション サーバーを使用することです。

Jenkins に 15 分ごとにバージョン管理システムをポーリングさせると、コミットに気付くとプロジェクトがビルドされます。ソース コードが機能することをすぐに知ることができます。

于 2014-03-19T10:58:21.977 に答える
0

全体的な CI ビルドの一部として、Jenkins のような CI ツールを使用して、コード変更ごとにテストを実行してみませんか? Jenkins でソース管理システムをポーリングし、ファイルが変更されたときにビルドまたは個別のテスト ジョブを実行するのは簡単です。

于 2014-03-19T10:57:38.927 に答える