要件
Javaのプロジェクトのプロダクトコードに対応するテストコードがあるかどうかを確認したい。
前提は以下。
・プロダクトコードとテストコードのパッケージ構成は同じ
・テストコードはプロダクトコード+Testで命名されている
・出力するCSVのレイアウトは以下
パッケージも含むプロダクトコードのファイル名,テストクラスの有無(○か×)
サンプルコード
前提となるフォルダ構成
C:\test>tree /F C:. └─sample_project ├─src │ └─jp │ └─co │ └─hoge │ ├─package1 │ │ Class1_1.java │ │ Class1_2.java │ │ Class1_3.java │ │ │ ├─package2 │ │ Class2_1.java │ │ Class2_2.java │ │ Class2_3.java │ │ │ └─package3 │ Class3_1.java │ Class3_2.java │ Class3_3.java │ └─test └─jp └─co └─hoge ├─package1 │ Class1_1Test.java │ Class1_2Test.java │ Class1_3Test.java │ ├─package2 │ Class2_1Test.java │ Class2_2Test.java │ └─package3 Class3_1Test.java
# encoding: Windows-31J class OutputMakedTestList PRODUCT_CODE_PATH = 'C:\test\sample_project\src' TEST_CODE_PATH = 'C:\test\sample_project\test' def get_product_code_map(code_path, test_path) code_test_map = Hash.new Dir::chdir(code_path) Dir::glob("**/*.java") do |f| code_test_map[get_key(f)] = false end Dir::chdir(test_path) Dir::glob("**/*.java") do |f| code_test_map[get_key(f).gsub(/Test$/, "")] = true end return code_test_map end def output_csv(product_code_map) output = "" product_code_map.each do |key,value| output += key output += "," output += value ? "○" : "×" output += "\n" end puts output end private def get_key(file_name) file_name.gsub('/','.').gsub(".java","") end end output_maked_test_list = OutputMakedTestList.new product_code_map = output_maked_test_list.get_product_code_map(OutputMakedTestList::PRODUCT_CODE_PATH, OutputMakedTestList::TEST_CODE_PATH) output_maked_test_list.output_csv(product_code_map)
出力
jp.co.hoge.package1.Class1_1,○ jp.co.hoge.package1.Class1_2,○ jp.co.hoge.package1.Class1_3,○ jp.co.hoge.package2.Class2_1,○ jp.co.hoge.package2.Class2_2,○ jp.co.hoge.package2.Class2_3,× jp.co.hoge.package3.Class3_1,○ jp.co.hoge.package3.Class3_2,× jp.co.hoge.package3.Class3_3,×