Últimas Arquivo Comunicados

mail2weblog (1.3.9)2013-08-09 13:18

トピックス (Topics)

最近の更新 (Recent Changes)

2015-05-21
2015-05-13
2015-03-05
2014-10-03
2013-08-22

開発情報

テスト情報

1. テストコード

1.1. 作成する際の原則

  • minitest モジュールを使います。
  • 1クラスに対して1テストコードクラスを作成してください。
  • フォルダ構成は main/lib に従います。
  • xxx_yyy_zzz.rb ソースに対するテストコードソースファイル名は test_xxx_yyy_zzz.rb です。
  • XxxYyyZzz クラスに対して作成するテストコードクラス名は TestXxxYyyZzz です。
  • テストメソッドの接頭詞には必ず test_を使ってください。
  • メンテナンスのためバランスを重視します。
    • 必ずしもカバレージ100%は不要です。
      • 稀有なケースをテストしようとして複雑にし過ぎないこと。
    • 必ずしも全結果の精査は不要です。
      • 細かい文言等、変わる可能性のあるような箇所までテストしようとして複雑にし過ぎないこと。
    • なるべく単純に、広範囲に渡って、重要なインターフェイスの確認に集中してください。
  • データによって想定ケースが増えるような場合は、設定やテストデータファイルの追加で想定ケースのテストを順次追加できるようにします。
    • 例えばブログの種類、メールのバリーションでの問題が増えた際に順次対応できるようにします。
  • テストコードは「1.2. テストコードの記述構成」に従って書いてください。
    • setup, teardown は必要に応じて定義してください。
  • テスト全般で利用する処理は、test/testutils に定義して利用してください。

1.2. テストコードの記述構成

この書き方に従うことで、実際に稼働している環境でのテスト実行を可能にします。

# coding: UTF-8

if $0 == __FILE__ then
	ROOT_PATH = File.dirname(File.expand_path(__FILE__))

	$:.unshift(ROOT_PATH + "/../../../")
	$:.unshift(ROOT_PATH + "/../../../../main/")
	$:.unshift(ROOT_PATH + "/../../../../main/lib/")

	# mail2weblog のルートパスを設定する
	M2W_ROOT_PATH = ROOT_PATH + "/../../../../main/"

	require 'm2w_configurator'
	require 'minitest/autorun'
end

# <<必要な require 文>>
# 事例
require 'abc_def_ghi'

require File.expand_path("#{File.dirname(File.expand_path(__FILE__))}/../../conf/setting")

# <<テストに対するコメント>>
#
# 最初の著者:: <<最初の著者>>
# リポジトリ情報:: $Id$
# 著作権:: Copyright (C) Ownway.info, 2011-2012. All rights reserved.
# ライセンス:: CPL(Common Public Licence)
class TestXxxYyyZzz < MiniTest::Unit::TestCase

	# <<テストメソッド>>
	def test_abc_def_ghi
		# <<テスト処理>>
	end

end

テストソースの配置によって、以下の文は適宜パスを合わせて記述してください。

該当文パス備考
1つ目の $:.unshift 文testテストユーティリティー関連(test/testutils にあるクラス群)を require しやすくするため
2つ目の $:.unshift 文mainプラグインを読み込めるようにするため。
3つ目の $:.unshift 文main/libライブラリを読み込めるようにするため。
M2W_ROOT_PATH 文mainm2w_configurator が main/conf を適切に読み込めるようにするため。
conf/setting の require 文test/m2w/conf全体的なテストの設定を読み込むため。

runtest コマンドプラグインで、メールにより稼働環境でテスト実行指示を出します。

その際、以下を実現するため、このような複雑な書き方をします。

  • ROOT_PATH, M2W_ROOT_PATH 定数定義の重複回避
  • $:(Ruby ライブラリをロードするときの検索パス)の重複追加回避
  • require 'minitest/autorun' の読み込みによるテスト実行の予約回避

1.3. 例外

  • main/plugin フォルダは test/m2w/plugin に配置します。
  • 独立したモジュールとして使えることを想定したクラスのテストコードは以下の記述構成に従ってください。
    • モジュールの独立性を保つためです。
# coding: UTF-8

if $0 == __FILE__ then
	begin
		require 'rubygems'
	rescue LoadError
	end

	ROOT_PATH = File.dirname(File.expand_path(__FILE__))

	$:.unshift(ROOT_PATH + "/../")
	$:.unshift(ROOT_PATH + "/../../main/")
	$:.unshift(ROOT_PATH + "/../../main/lib/")

	require 'minitest/autorun'
end

# <<必要な各種 require 文>>
# 事例
require 'abc_def_ghi'

# 設定ファイルを読み込む場合の事例
require File.expand_path("#{File.dirname(File.expand_path(__FILE__))}/conf/setting")

# <<テストに対するコメント>>
#
# 最初の著者:: <<最初の著者>>
# リポジトリ情報:: $Id$
# 著作権:: Copyright (C) Ownway.info, 2011-2012. All rights reserved.
# ライセンス:: CPL(Common Public Licence)
class TestXxxYyyZzz < MiniTest::Unit::TestCase

	# <<テストメソッド>>
	def test_abc_def_ghi
		# <<テスト処理>>
	end

end

2. 定期テスト実行

2.1. ナイトリー総合テスト

サポートブログに対して自動投稿を行う総合テストを実施しています。

時間は以下の通りです。

  • 午前1時

テスト結果を見るには、以下のリンクを参考にして下さい。

ただし。実装の変更に伴い適宜自動テストを実施している場合もあります。


2.2. 参考

本テスト結果の表示には、以下の継続的インテグレーションベースを利用しています。

上記プロジェクトは、本プロジェクトから派生したものです。