要件
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,×