②Meteorに触ってみる(クラウド環境へのデプロイ)
Meteorで作成したWEBアプリケーションをクラウド環境にデプロイしてみます。
今回は、Meteor公式から提供されているクラウド環境を使用してみます。
■デプロイ
下記コマンドで、クラウド環境へデプロイします。※「hogehogehoge」の部分は、任意のサイト名を指定します
meteor deploy hogehogehoge.meteor.com
http://hogehogehoge.meteor.comにブラウザでアクセスしてみます。
う〜ん、簡単ですね!
①Meteorに触ってみる(インストールと初めてのアプリ作成)
簡単にWebアプリケーションが作れるMeteorを触ってみます。
■Meteorとは?
Webアプリケーション開発プラットフォームです。
JavaScriptとHTML+CSSだけで、Webアプリケーションが作成できます。
・公式サイト
https://www.meteor.com/
■インストール
MacとLinuxの場合は、下記コマンドで、簡単にインストールできます。
curl https://install.meteor.com/ | sh
Windowsインストーラもあるので、Windowsにもインストールできるみたいです。
今回は、Ubuntu環境に入れてみます。
■アプリ作成
下記コマンドで、アプリを作成します。※「HelloWorld」部分は任意のアプリ名を指定します
meteor create HelloWorld
下記コマンドで、アプリを実行してみます。
cd HelloWorld meteor
Webアプリケーションサーバも内蔵されているので、
ApacheやTomcat等のインストールは不要です。
また、データベースは、MongoDBが組み込まれています。
・MongoDB
https://ja.wikipedia.org/wiki/MongoDB
MongoDBは、NoSQLデータベースです。
NoSQLデータベースは、データを階層構造で格納するので、
RDBMSで必要な、テーブル作成(CreateTable文)は不要です。
事前準備なしで、直ぐに使用できます。
http://localhost:3000に、ブラウザでアクセスしてみます。
AntからGroovyスクリプトを実行してみる⑨
AntからGroovyスクリプトを実行してみます。
<?xml version="1.0" ?> <project name="sample" default="test"> <!-- groovy-all-*.jar を指定 --> <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpath="groovy-all-2.3.7.jar" /> <target name="test"> <groovy><![CDATA[ // Eclipse上から実行する場合は、groovy-all-X.X.X.jarのクラスパス追加が必要 // // 1)「build.xml」を右クリック→「実行」→「Antビルド(3)」 // 2)「クラスパス」タブの「追加タスクおよびサポート」に「groovy-all-X.X.X.jar」を追加する // groovyスクリプトを自由に記述できる。 // 下記変数は、暗黙的に利用可能。 // // ant …AntBuilder // project …ビルドしているプロジェクト // properties …プロパティ (変更可能) // target …実行しているターゲット // task …Groovyをラップしているタスク println "Hello World!!" ]]></groovy> </target> </project>
groovy-all-*.jarのパスを通すと、
Antでも、条件分岐やループ等の処理を記述する事は可能なのですが、
Groovyスクリプトで記述した方が分かりやすいですね!
また、AntからGroovyスクリプトを実行することで、
(Antでは実現できない)複雑な処理を、Antから実行することができます。
自宅開発環境のアップデート
自宅開発環境アップデートです。
前回の教訓を生かして、こまめにアップデートします。自分への覚書を残しておきます。
■Ubuntuアップデート
VirtualBox上のEclipse等を詰め込んだ、Ubuntu開発環境をアップデート。
特に問題なく終了。
■Hyper-V Serverアップデート
古くなったPCに、Hyper-V 2012 Server Consoleを入れています。
Hyper-V ServerのWindows Updateを実行。特に問題なく終了。
Hyper-V上のCentOS5.10は、yum update でアップデート。特に問題なく終了。
Hyper-V上のJenkinsとJenkinsプラグインもアップデート。特に問題なく終了。
■Windowsのアップデート
Windows8.1→Windows10にアップデート。
アップデート直後は、画面の解像度が変更できなかったり、
Google Chromeが強制終了するなどで、ちょっとビビりましたが、
Windows Updateとディスプレイドライバを更新したら治りました。
今のところ、問題なく使えています。なんとなく、OS自体が軽くなった気がする。(気分的に)
Windows10にしてしまったので、 Hyper-VServerのリモート管理ができなくなった・・・
Windows10用のリモート サーバー管理ツールと、hvremoteの配布待ちですね。
https://code.msdn.microsoft.com/windowsdesktop/Hyper-V-Remote-Management-26d127c6
Groovyでユニットテストを書いてみる(DbUnit)⑧
Groovyでユニットテストを書いてみます。
今回は、DbUnitを使用してみます。
■Groovyでユニットテスト
package sample // いろいろと方法がありますが、今回は、spockを使用します。 // spock:https://code.google.com/p/spock/ // spockのJARファイルは、下記からダウンロードしました。 // http://repo1.maven.org/maven2/org/spockframework/spock-core/1.0-groovy-2.3/ // spockのテストをEclipseで実行するには、 //「Preferences ⇒ Groovy ⇒ Use monospace font for JUnit」をチェックする。 import static org.junit.Assert.* import groovy.sql.Sql import mockit.* import org.dbunit.Assertion import org.dbunit.database.DatabaseConnection import org.dbunit.dataset.IDataSet import org.dbunit.dataset.excel.XlsDataSet import org.dbunit.operation.DatabaseOperation import org.junit.* import spock.lang.* class ユニットテスト extends Specification { @Test def "DbUnitを使ってみる(参照)"() { // DbUnitのJARファイルは、下記からダウンロードしました。 // http://sourceforge.net/projects/dbunit/files/dbunit/ // SLF4Jも必要です。 // slf4j-nop-X.X.X.jar、slf4j-api-X.X.X.jar // http://www.slf4j.org/download.html // Apache POIも必要です。 // https://poi.apache.org/download.html setup: // 前準備 // H2データベースを起動 def server = org.h2.tools.Server.createTcpServer().start() // DB接続 def sql = Sql.newInstance( 'jdbc:h2:tcp://localhost/~/test', 'sa', '', 'org.h2.Driver' ) // テーブル作成 try { sql.execute( "CREATE TABLE TEST ( NAME varchar(50), TEXT varchar(100) )" ) } catch( Throwable t ) {} // 既にテーブルがある場合のエラーは無視 // 初期データ投入 IDataSet xls = new XlsDataSet( new File( './TEST.xls' ) ) // .xlsx形式だと動かない・・・ DatabaseConnection connection = new DatabaseConnection( sql.getConnection() ) DatabaseOperation.CLEAN_INSERT.execute( connection, xls ) when: // SELECT実行 def rows = sql.rows( "select * from TEST" ) then: // 実行結果を検証 rows.size() == 1 // 取得行は1件であるか rows[ 0 ].NAME == 'test' // NAMEカラムの値が'test'であるか rows[ 0 ].TEXT == 'text' // TEXTカラムの値が'text'であるか cleanup: // 後処理 sql.close() server.stop() } @Test def "DbUnitを使ってみる(更新)"() { setup: // 前準備 // H2データベースを起動 def server = org.h2.tools.Server.createTcpServer().start() // DB接続 def sql = Sql.newInstance( 'jdbc:h2:tcp://localhost/~/test', 'sa', '', 'org.h2.Driver' ) // テーブル作成 try { sql.execute( "CREATE TABLE TEST ( NAME varchar(50), TEXT varchar(100) )" ) } catch( Throwable t ) {} // 既にテーブルがある場合のエラーは無視 // 初期化(全レコード削除) IDataSet xls = new XlsDataSet( new File( './TEST.xls' ) ) // .xlsx形式だと動かない・・・ DatabaseConnection connection = new DatabaseConnection( sql.getConnection() ) DatabaseOperation.DELETE_ALL.execute( connection, xls ) when: // INSERT実行 sql.execute( "INSERT INTO TEST( NAME, TEXT ) values ( 'test', 'text' )" ) then: // 期待値Excelと比較 IDataSet actual = connection.createDataSet() Assertion.assertEquals( xls.getTable( 'TEST' ), actual.getTable( 'TEST' ) ) // テーブルと期待値Excelが一致するか cleanup:// 後処理 sql.close() server.stop() } }
DbUnitで、データベース操作のユニットテストをしてみました。
参照系は、Excelファイルから初期データを投入しておき、SELECTの取得結果が想定どおりであるかを確認。
更新系は、INSERTを実行し、INSERT結果が期待値Excelファイルと一致するかを確認します。
初期データおよび期待値のExcelファイルは下記の形式です。
シート名がテーブル名、1行目がカラム名、2行目移行がデータです。
Groovyでユニットテストを書いてみる(Mock)⑦
Groovyでユニットテストを書いてみます。
今回は、Mockを使用してみます。
■Groovyでユニットテスト
package sample // いろいろと方法がありますが、今回は、spockを使用します。 // spock:https://code.google.com/p/spock/ // spockのJARファイルは、下記からダウンロードしました。 // http://repo1.maven.org/maven2/org/spockframework/spock-core/1.0-groovy-2.3/ // spockのテストをEclipseで実行するには、 //「Preferences ⇒ Groovy ⇒ Use monospace font for JUnit」をチェックする。 import static org.junit.Assert.* import groovy.sql.Sql import mockit.* import org.dbunit.Assertion import org.dbunit.database.DatabaseConnection import org.dbunit.dataset.IDataSet import org.dbunit.dataset.excel.XlsDataSet import org.dbunit.operation.DatabaseOperation import org.junit.* import spock.lang.* class ユニットテスト extends Specification { @Test def "Mockを使ってみる"() { // Mockを使って、既存クラスの挙動を変更する事ができる。 // 異常系の試験が簡単になります。(わざとエラーコードを返却させるなど) // JMockitを使います。 // JMockitのJARファイルは、下記からダウンロードしました。 // http://jmockit.org/ // JMockit.jarをjunit.jarより上位のクラスパスに設定します。(JMockit.jarを先に読み込む必要がある為) setup: // 前準備 // System.currentTimeMillis()にMockを設定し、現在時刻でなく、0を返却する new MockUp<java.lang.System>() { @Mock long currentTimeMillis() { return 0 } } cleanup:// 後処理 when: def x = System.currentTimeMillis() then: x == 0 // 0で返却されるのでテストOK } }
JMockitで、Mockを使ってユニットテストをしてみました。
System.currentTimeMillis()は、Javaの標準ライブラリですが、
Mockにすり替えて、戻り値を0に変更しています。
このように、Mockを使うと、
Java標準APIの挙動を自由に操作できるので、ユニットテストが簡単になります。(ラップする必要がなくなります)
Groovyでユニットテストを書いてみる⑥
Groovyでユニットテストを書いてみます。
■Groovyでユニットテスト
package sample // いろいろと方法がありますが、今回は、spockを使用します。 // spock:https://code.google.com/p/spock/ // spockのJARファイルは、下記からダウンロードしました。 // http://repo1.maven.org/maven2/org/spockframework/spock-core/1.0-groovy-2.3/ // spockのテストをEclipseで実行するには、 //「Preferences ⇒ Groovy ⇒ Use monospace font for JUnit」をチェックする。 import static org.junit.Assert.* import groovy.sql.Sql import mockit.* import org.dbunit.Assertion import org.dbunit.database.DatabaseConnection import org.dbunit.dataset.IDataSet import org.dbunit.dataset.excel.XlsDataSet import org.dbunit.operation.DatabaseOperation import org.junit.* import spock.lang.* class ユニットテスト extends Specification { @Test def "java.lang.Mathのテスト(基本)"() { setup: // 前準備 cleanup:// 後処理 // when: テストしたいことを実行 // then: 実行結果をチェック when: def x1 = Math.max( 1, 2 ) then: x1 == 2 // when 〜 then は複数記載できる when: def x2 = Math.max( 0, 2 ) then: x2 == 2 when: def x3 = Math.max( 1, 0 ) then: x3 == 1 } @Test def "java.lang.Mathのテスト(応用)"() { setup: // 前準備 cleanup:// 後処理 // expect 〜 where で、引数と戻り値の複数パターンをまとめて記載できる expect: Math.max( a, b ) == c where: a | b || c 1 | 2 || 2 0 | 2 || 2 1 | 0 || 1 } }
spockを使うと簡潔に書けます。
JUnitを使った事がある人は、なんとなくコードからイメージが掴めると思います。
特筆すべきは、パラメータと戻り値の複数パターンテストですね。
where句にマトリックスのイメージで、テストパターンが記述できます。
テストパターンが一目瞭然です。
spockをEclipseで使用するには、設定を1箇所変更する必要があります。
Eclipseメニューの「ウィンドウ」→「設定」を選択。
「Groovy」→「Use monospace font for JUnit」をチェックします。
実行してみます。実行方法はJUnitと同じです。
ソースファイルを選択して、右クリック。
コンテキストメニューから「実行」→「JUnit テスト」を選択します。
ユニットテストでエラーになると、こうなります。
Eclipse上だとインデントがズレるので、ちょっと見にくいですが、
テキストをコピーすると下記のようになります。
spockの場合、引数や期待値、実際の値を示してくれるので、わかりやすいですね。
(引数a=0、b=2、期待値は3だけど、実際の値は2で一致してないよ。といっています)
Condition not satisfied: Math.max( a, b ) == c | | | | | 2 0 2 | 3 false at sample.UnitTest.java.lang.Mathのテスト(応用)(UnitTest.groovy:59)