「初めての自動テスト」を読んだメモ
第Ⅰ部:基礎
ユニットテスト
🙆 メリット
- 超高速
- 多目的に利用できる
🙅 デメリット
- 統合部分の確認に弱い
- 全体がつながっているか、は統合テストで確認
統合テスト
🙆 メリット
🙅 デメリット
- 詳細さに欠ける
- 「何か」が壊れていることはわかっても、「どこ」が壊れているかわからない
UIテスト
🙆 メリット
- エンドツーエンドで動く
- システムの内部構造に立ち入らず、システムの外から全体をテストする
- ユーザと同じ対象を見る
🙅 デメリット
- 高コストで遅い
- HTMLの要素が変わったりすると壊れてしまう
親指の法則
- UIよりもユニットを優先する
- ユニットテストでうめられないことを統合テストでカバーする
- UIテストは限定的に行う
そのほか
- JSもテストがかける
- REST
- Ajax
第Ⅱ部
なんとなくつかっていたファサードについて少し調べた
普段業務のなかでなんとなく理解していることが多いなと感じたので、 自分のメモとしてなんとなく理解していることをちょこちょこ書いていきます。
ファサードとは
フレームワークの機能を簡単に利用できるもの
例)Config の例
Config::get('app.debug')
がコールされるConfigの実体である
Illuminate\Support\Facades\Config
クラスの getメソッド を呼び出す(config/app.php のaliases
にクラス名が定義されている)Illuminate\Support\Facades\Config
クラス には getメソッド がないため、スーパークラスの__callStatic
メソッドを呼び出す(スーパークラス = 継承元のクラス:Illuminate/Support/Facades/Facade
)__callStatic
メソッドでは、getFacadeRoot
メソッドで操作対象のインスタンスを取得し、getメソッドを実行する
/** * $method: 実行メソッド名(get) * $args: 実行されたメソッドの引数を格納した配列(['app.debug']) **/ public static function __callStatic($method, $args) { $instance = static::getFacadeRoot(); // ① if (! $instance) { throw new RuntimeException('A facade root has not been set.'); } return $instance->$method(...$args); // ② }
① ファサードが受け持つインスタンスをサービスコンテナから取得
② $methodの名前でインスタンスメソッドを実行
Laravel5.* で FORM, HTMLファサードをつかうには
- パッケージをインストール
$ composer require laravelcollective/html
インストールすると、composer.json
に laravelcollective/html
が追加される
github.com
2. config.app
の providers
に追記する
'providers' => [ // ... Collective\Html\HtmlServiceProvider::class, // ... ],
config.app
のaliases
にクラス名を定義する
'aliases' => [ // ..., 'Form' => Collective\Html\FormFacade::class, 'Html' => Collective\Html\HtmlFacade::class, // ..., ],
MacでSeleniumを動かしてみました!
Seleniumとは
Seleniumとは、Webアプリケーションの画面操作を自動化するツールです。 クリックやキー入力、画面に表示された値の取得や画面キャプチャの取得など、ブラウザに対するさまざまな操作を自動で行うことができます。
引用:Selenium 実践入門
用意するもの
今回は Mac + Ruby + Chrome で動かすための用意になります!
1. Selenium WebDriverをインストール
Selenium WebDriverとは、プログラミング言語のコードからブラウザ操作が可能なライブラリです。 Java・Ruby・Javascriptなど各言語のライブラリとして提供されています。
引用:Selenium 実践入門
わたしは今回Rubyをつかうので、gemを利用してインストールします!
$ sudo gem install selenium-webdriver
このときRubyのバージョンが古いと、うまくいかないことがあるのでご注意ください!
バージョンを新しくする方法は下記記事を参考にさせていただきました。
2. 使用するブラウザのドライバをインストール
WebDriverは利用するドライバクラスを差し替えることでさまざまなブラウザ上で実行することができます。
わたしはChromeをつかいたいので、Chromedriverをインストールしました!
brew install chromedriver
Chromeのほかにも
FirefoxDriver
InternetExplorerDriver
SafariDriver
などあり、それぞれセットアップ方法も違うようなので調べてみてください!
3. 関連ライブラリのインストール
capybara
Rubyでスクリプトを記述するWebアプリケーションのE2Eテスト*1フレームワーク
ブラウザ操作(クリック・フォームコントロール・要素の取得など)を簡単なコマンドで行うことができるようになります!
sudo gem install capybara
Rspec
RubyでWebDriverと組み合わせて利用できるテストフレームワーク
sudo gem install rspec
以上で用意は完了となります!
いざ実行!
▼ test.rb
require 'capybara/rspec' # seleniumでchoromeを使用する Capybara.default_driver = :selenium Capybara.register_driver :selenium do |app| Capybara::Selenium::Driver.new(app, :browser => :chrome) end feature 'Cabybaraのサンプル' do scenario 'テストすること' do # Googleへアクセス visit 'https://www.google.co.jp/' end end
$ rspec test.rb
Chromeが自動的に立ち上がり、Googleへアクセスしたら成功です!
ひとこと
Seleniumを先輩から教えていただいて、備忘録のためにもまとめようと思い書きはじめましたが書きおえるのに数日要しました・・
ブログを書くのって難しい、ほぼ引用のくせに。。
記法も調べながら書くので所要時間倍増です;;
参考にした書籍
*1:E2E(End to End)テスト:ユーザと同じようにブラウザを操作し、挙動が期待通りになっているか確認するテスト
ブログをはじめます!
もうすぐ新卒が終わるエンジニアです。
ブログをはじめてみることにしました!
目的は
・アウトプットすることで理解を深める
・学んだことを忘れないようにする
今までしようしようとおもってできていなかったので、
しっかり継続して発信していきたいです!