blog1.mammb.com では CoreMatchers についてでしたが、こちらでは org.hamcrest.Matchers についてまとめます。 org.hamcrest.Matchers JUnit についてくるのは org.hamcrest.CoreMatchers で基本的な Matcher が提供されています。org.hamcrest.Matchers は CoreMatchers を機能拡張したものとなってます。CoreMatchers にあるメソッドは、Matchers にもあります。 hamcrest-core − org.hamcrest.Matchers が入ってる hamcrest-library − org.hamcrest.Matchers が入ってる hamcrest-library は以下のようなパッケージ構成となっており、各用途に応じた Ma
以前のモックフレームワークの技術的制約 今まで私が担当してきたプロジェクトにおいては、モックオブジェクトを使ったJUnitの単体試験はjMockとEasyMockのいずれかのフレームワークを利用して行ってきました。しかし、これらのフレームワークはJavaプラットフォームにおけるコード自動生成の考え方の変遷で説明したように動的プロキシーに基づいているため、以下のような制約がありました。 モック化する対象の型はインターフェースを実装しているか、継承可能なクラスであること モック化するメソッドはfinal、static、privateでないこと*1 モック化するロジックはコンストラクターの呼び出しではないこと モックオブジェクトをテスト対象クラスにDIかパラメーター経由で引き渡すことが可能であること モック化する場合はクラス全体をモック化する必要があること(getterやsetterなどは本物の
ユニットテスト対象のクラスが、別なクラスのstaticメソッドを呼んでインスタンスを取得し、そのインスタンスのメソッドを呼び出し、その戻り値によってロジックが左右されるという場合のテストを想定します。 テスト対象クラス // 気象センサーから取得した気温が30度を超過していたら、 // 異常を報告する気象監視クラス。 package monitor; import sensor.WeatherSensor; import sensor.SensorFactory; public class ThresholdMonitor { private WeatherSensor sensor; public ThresholdMonitor() { sensor = SensorFactory.getWeatherSensor(); } // 気温を監視し30度を超過していたら異常を報告する。 p
JUnitより簡単なオープンソースの「TestNG」とは?:次世代テストフレームワークでテストを変える(1)(1/3 ページ) テスティングフレームワークといえば…… Javaエンジニアが「テスティングフレームワーク」という単語を聞いて、真っ先に連想するものは、「JUnit」でしょう。しかし、テスティングフレームワークはJUnitだけではありません。「TestNG」というテスティングフレームワークも海外では高く評価され、確固とした地位を築いています。例えば、JBoss SeamはTestNGをベースにした統合テストフレームワークを提供しています。 この連載ではTestNGのコンセプトから詳細な使い方まで解説し、開発プロジェクトにおいてTestNGを利用する際の助けとしていただくことが目的です。 連載第1回では、Javaエンジニアになじみ深いJUnitとTestNGを比較し、2つのフレームワ
jMockとは モックの振る舞い定義が、慣れると心地いいモックライブラリです。本家サイトは以下。 http://www.jmock.org/index.html jMock利用準備 クラスパスへ以下のjarを追加します。 jmock-2.5.1.jar hamcrest-core-1.1.jar hamcrest-library-1.1.jar jmock-junit4-2.5.1.jar 今回はJUnit4とcommons-langを使うので以下も追加 junit-4.7.jar commons-lang-2.4.jar テスト対象ソースの作成 Item クラスを以下のように作成します。equals()を実装しておきます。 public class Item { private Long id; private String name; public Item(Long id, Stri
Java, Cayenne, jMockjMockの使い方を,いまさらながら調べたのでメモ的に記録しておきます。 ORマッピング・フレームワークであるApache Cayenneでは,多くのORマッパと異なり,データオブジェクト(エンティティ)がインタフェースを使っていません。Cayenneはバイトコード・エンハンスとかを使用しない作りなので,継承関係を用いてデータオブジェクトの機能が提供されてます。で,このデータオブジェクトのテストを実行する際にモックを使いたいのだけど,インタフェースがないからどうしよう,という話がありました。 答えは簡単な話で,ほとんどのモック・ライブラリは実クラスのモック化をサポートしています。今回はjMockを使いました。easyMockでも同じようなことは可能でしょう。pom.xmlへのライブラリの追加次のライブラリをMavenのpom.xmlに追加します。 o
では実際にjMockを使ってみます。 メインコード メインクラスを Sample、外部インターフェイスを External とします。 public interface External { void someExternal(); } public class Sample { private External external; public void some() { System.out.println("some start"); external.someExternal(); System.out.println("some end"); } public void setExternal(External external) { this.external = external; } } 必要なjarファイルのダウンロード 今回使用するのはjMock2(JDK1.5以上版)
Q:高価または複雑なリソースに依存するオブジェクトのテストはどのように行うのか。A:定数を返す仮バージョンのリソースを作成する。どうして?データベースを利用した機能のテストを書くとします。データベースは起動に長い時間を要し、接続にも長い時間がかかります。また、リモートサーバ上に配置されていれば、テストをネットワーク上の物理位置に依存させることになります。とはいえ、データベースは開発でエラーが発生しやすい箇所なので、特にテストを実行したい部分でもあります。どうすれば?データベースのように振る舞う、実際にはメモリに存在するだけのオブジェクト、「モック」を用いてテストを作成します。 @Test public void testOrderLookup(){ Database db = new MockDatabase(); db.expectQuery("select order_no from
久しぶりにEclipseを起動して、jMockのプロジェクトを作ってモックの動作を試してみる。動作環境は下記の通り。 MacOS X 10.6.4 (Snow Leopard) Eclipse 3.5 (Galileo) 下記のサイトを参考にしてプロジェクトを作成した。 ライブラリには下記を使った。 hamcrest-core-1.1.jar hamcrest-library-1.1.jar jmock-2.5.1.jar jmock-junit4-2.5.1.jar テストを実行させてみると、下記の例外が発生してしまう。テストが上手く実行出来ていない。 java.lang.SecurityException: class "org.hamcrest.TypeSafeMatcher"'s signer information does not match signer informatio
id: 448 所有者: msakamoto-sf 作成日: 2009-10-02 10:11:49 カテゴリ: Java TDD プログラミング JavaでJUnitを使った単体テストのコードを書く時、Mockオブジェクトを使いたい、という場合がある。 例えばテスト対象のインスタンスメソッドの中で、トランザクションやデータベースの接続クラスのインスタンスをnewしていたりする時、 単体テストコードを作る為にMockのトランザクション/DB接続クラスに差し替えたい、というケース。 次のIBM developerworks の記事では、テスト対象のメソッドのインターフェイスを変えずに内部だけをリファクタリングし、 Mockオブジェクトに差し替える手法が紹介されている。 "Unit testing with mock objects" http://www.ibm.com/developerw
Swing版はテストをツリー状に見ることができるなどAWT版に比べて機能が追加されているので、できればSwing版をお使いになることをお勧めします。 インストールが正しく行われているか確かめるためにサンプルを動かしてみましょう。junit3.8.1ディレクトリで次のようにTestRunnerを起動させてみてください。 ここではWindowsXPで起動させた場合を示します。 c:\junit3.8.1> java -cp junit.jar;. junit.swingui.TestRunner junit.samples.AllTests TestRunnerを引数つきで起動させると自動的にテストを開始します。起動すると、図2のようなフレームが表示されます(丸数字は筆者が説明のために付記したものです)。モノクロームでは分かりにくいのですが、図2-5 のバーが緑になっていればテストが成功してい
テストを書いているとモックオブジェクトを使う機会が多いと思います。そのモックオブジェクトは自前で作るよりは、JMockやMockito*1などのフレームワークを利用した方が楽でしょう。 今回は機能的に、ほぼ最強と思われるJMockitを紹介します。 これが、他のモックフレームワークとの機能比較です。 MockingToolkitComparisonMatrix - jmockit - A feature matrix comparing several mocking toolkits. - Project Hosting on Google Code 機能が多ければ使いやすいか。そんなことはないと思います。しかし、これは使いやすいかもと周りの人からお勧めがあったので、実際に使ってどんなところが使えるのか検証してみたので、書いてみます。あと、最後にScalaで使えるか試してみました。 あ、
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く