Kindle本「Rubyでテスト自動化を実現しよう」のまとめ。
点数
78点
感想
selenuim webdriverとtest-unitの使い方が書かれていた。
Jenkinsの説明もあったが、必要かどうかよくわからなかった。
また、test-unitの結果をXMLで生成するための手順もあったが、説明が雑すぎてよくわからなかった。
主な内容
assertメソッド
test-unitには多くのassertメソッドが用意されている。
assert_equal a, b
assert_not_equal a, b
assert a
assert_match a, b
assert_raise(XxxError) do ... end
start_with?メソッド
Rubyのstart_with?メソッドは、先頭が引数文字列で始まっていればtrue、そうでなければfalseを返す。
startupメソッドとshutdownメソッド
各テストメソッドの実行前後はsetup, teardownだが、テスト全体の前後はstartup, shutdownを使うことになる。ただし、setup, teardownはインスタンスメソッドであるのに対し、startup, shutdownはクラスメソッドなので注意。 「class << self~end」の間に定義する必要がある。
class MyTestCase < Test::Unit::TestCase
class << self
def startup
puts "startup"
@@ calc = Calculator.new
end
end
def test_add
assert_equal 7, @@calc.add(5, 2)
end
end
omitメソッドとpendメソッド
テスト項目は存在するが未実装の場合など、テストをスキップしたい場合に使う。 2つの違いは特にない。
def test_test1
omit("not implemented yet")
end
def test_test2
pend("not implemented yet")
end
パラメータ指定
test-unitにはdataメソッドが用意されており、引数にハッシュを渡すことでパラメータを変えてテストをすることができる。
class MyTestCase < Test::Unit::TestCase
data(
'test_data1' => [5, 2, 7],
'test_data2' => [6, 2, 8]
)
def test_add(data)
a, b, result = data
calc = Calculator.new
assert_equal result, calc.add(a, b)
end
end
- Rubyでは最後の引数がハッシュの場合は{}を省略できる
- Rubyでは変数1, 変数2 = [要素1, 要素2]で配列の各要素が左辺の変数に代入される
- Rubyではクラス定義に任意の式を書くことができ、クラス定義の際に実行される (https://docs.ruby-lang.org/ja/latest/doc/spec=2fdef.html)
例外テスト
assert_raiseを使って、例外発生を確認するテストを定義できる。
def test_div
assert_equals(ZeroDivisionError) do
calc = Calculator.new
calc.div(5, 0)
end
end
Jenkins
cronを使いやすくしたもので、設定や実行結果をブラウザ上で管理できる。 Jenkinsが行うタスクはプロジェクトとして管理される。
以下、手順。
- jenkins.warをダウンロードしてjava -jar jenkins.warを実行
- http://localhost.8080へアクセス
- プロジェクトを作成
- Add build step⇒Execute shellで実行コマンドをセット
- Configure⇒Build periodicallyで実行スケジュールをセット
テスト結果をJenkins上でグラフ表示
test-unitの結果をXMLで生成し、Jenkinsプラグインでグラフ表示する必要がある。
- CI::Reporterをインストール
sudo gem install ci_reporter_test_unit
- テストケースのコードにrequireを追加
require 'ci/reporter/rake/test_unit'
- Rakefileを作成
rakeコマンドでテストを実行するとXMLが生成される - Jenkins⇒Manage Jenkins⇒Manage Plugins⇒Available⇒jUnit plugin
- Execute shellのAdd post-build-actionでPublish JUnit test result reportを選択し、Test report XMLsにtest/reports/*.xmlを入力
コードカバレッジツールの活用
SimpleCovはRubyで書かれたコードカバレッジ取得ツール。
- インストール
sudo gem install simplecov
- テストケースの先頭に追加
require 'simplecov' SimpleCov.start
モックオブジェクトの活用
RubyではMochaライブラリを使ってモックを実現することができる。
- インストール
sudo gem install mocha
- テストケースの先頭に追加
require 'mocha/test_unit'
- モックを使いたい箇所に以下のような記述を追加
cal = Calcilator.new calc.expects(:add).returns(200) # この行を追加することでaddの戻り値は200固定になる
assert_equal 200, calc.add(1,2)
Selenium WebDriverのChromeでプログラム終了時にブラウザを閉じないようにする
caps = Selenium::WebDriver::Remote::Capabilities.chrome(:chrome_options => {detach: true})
driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps