Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

RubyでJavaのプロダクトコードとテストコードの対応有無チェック用のCSV生成

概要

RubyJavaのプロダクトコードとテストコードの対応有無チェック用のCSV生成します。

要件

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