ブログ@kaorun55

HoloLensやKinectなどのDepthセンサーを中心に書いています。

CppUnit-x ではじめる、簡単ユニットテスト−その7 Subversion との連携 パート2

eXtreme Programmingテスト技法―xUnitではじめる実践XPプログラミング (OOP foundations)

eXtreme Programmingテスト技法―xUnitではじめる実践XPプログラミング (OOP foundations)

この本の写経シリーズ。


第7回は、Subversion との連携パート2で、前回の続き。


前回までで、ソースを Subversion リポジトリから更新して、ビルド、テストし、結果をコミットが出来た。
しかし、テスト結果がコミットログに反映されなかったので、テスト結果をコミットログに反映するようにした。

ゴール

テスト結果がコミットログに残る。

手順

テスト結果を出力したログファイルから、テスト結果を抽出しリポジトリへコミットする Ruby のプログラムを書き、それをテスト後にバッチファイルから実行する。

TestSvnCommiter.rb
class TestSvnCommiter

  def initialize
  end

  def run
    ok = /(OK*)/
    ng = /(!!!FAILURES!!!*)/
    @msg = ""
    @phase = 1

    File.readlines( "log.txt" ).each do |f|
      # phase 1 テスト結果検索
      if @phase == 1 then
        # "OK" か "!!!FAILURES!!!" を見つけたら、以降がテスト結果
        if ok =~ f or ng =~ f then
          puts f
          @phase = 2
        end
      end

      # phase 2 テスト結果保存
      if @phase == 2 then
        @msg += f
      end
    end

    # コミットコマンドの作成とコミット
    @cmd = "\"C:\\Program Files\\VisualSVN Server\\bin\\svn\" commit -m \"" + @msg + "\""
    system( @cmd )

  end
end

commiter = TestSvnCommiter.new
commiter.run
run.bat

"C:\Program Files\VisualSVN Server\bin\svn" update
del Tester.*
ruby TestMakefileFactory.rb
nmake > log.txt
ruby TestSvnCommiter.rb
pause

結果

タイムライン

OK の場合のコミットログ

NG の場合のコミットログ

まとめ

ここまで出来ればとりあえずやることはやったかな。
あとは、ここで見たんだけど(多分 TracLightning に付属の)hudoson とやらが C++ 使えたり、nant 通して Visual Studio 動かせるらしいので、こいつをいじってまたいろいろできればいいと思う。


それにしても Ruby の凄いこと凄いこと。
Ruby いじったのは今回が初めてなんだけど、こんなカンジかな?でテキトーに書いてもちゃんと動く^^
わからないことがあっても、ちょっと調べればすぐに出てくる。
こりゃ流行る訳だわ^^;