Junit-extensions
JUnit-拡張機能
以下は、JUnit拡張機能です-
- カクタス
- JWebUnit
- XMLUnit
- モックオブジェクト
カクタス
Cactusは、サーバー側のJavaコード(サーブレット、EJB、タグライブラリ、フィルター)を単体テストするためのシンプルなテストフレームワークです。 Cactusの目的は、サーバー側コードのテストを記述するコストを削減することです。 JUnitを使用して拡張します。 Cactusは、コンテナ内でテストを実行するコンテナ内戦略を実装しています。
サボテン生態系はいくつかのコンポーネントで構成されています-
- Cactus Framework はCactusの中心です。 Cactusテストを記述するためのAPIを提供するのはエンジンです。
- Cactus Integration Modules は、Cactus Framework(Antスクリプト、Eclipseプラグイン、Mavenプラグイン)の簡単な使用方法を提供するフロントエンドおよびフレームワークです。
次のコードは、Cactusの使用方法を示しています。
import org.apache.cactus.*;
import junit.framework.*;
public class TestSampleServlet extends ServletTestCase {
@Test
public void testServlet() {
//Initialize class to test
SampleServlet servlet = new SampleServlet();
//Set a variable in session as the doSomething()
//method that we are testing
session.setAttribute("name", "value");
//Call the method to test, passing an
//HttpServletRequest object (for example)
String result = servlet.doSomething(request);
//Perform verification that test was successful
assertEquals("something", result);
assertEquals("otherValue", session.getAttribute("otherName"));
}
}
JWebUnit
JWebUnitは、Webアプリケーション用のJavaベースのテストフレームワークです。 HtmlUnitやSeleniumなどの既存のテストフレームワークを、統合されたシンプルなテストインターフェイスでラップして、Webアプリケーションの正確性をテストします。
JWebUnitは、一連のアサーションと組み合わせてWebアプリケーションをナビゲートし、アプリケーションの正確性を検証するための高レベルJava APIを提供します。 これには、リンクを介したナビゲーション、フォームの入力と送信、表の内容の検証、およびその他の典型的なビジネスWebアプリケーション機能が含まれます。
単純なナビゲーションメソッドとすぐに使用できるアサーションにより、JUnitまたはHtmlUnitのみを使用するよりも迅速なテスト作成が可能になります。 また、HtmlUnitからSelenium(近日提供予定)などの他のプラグインに切り替えたい場合は、テストを書き直す必要はありません。
これがサンプルコードです。
import junit.framework.TestCase;
import net.sourceforge.jwebunit.WebTester;
public class ExampleWebTestCase extends TestCase {
private WebTester tester;
public ExampleWebTestCase(String name) {
super(name);
tester = new WebTester();
}
//set base url
public void setUp() throws Exception {
getTestContext().setBaseUrl("http://myserver:8080/myapp");
}
//test base info
@Test
public void testInfoPage() {
beginAt("/infol");
}
}
XMLUnit
XMLUnitは、単一のJUnit拡張クラス、XMLTestCase、およびアサーションを可能にする一連のサポートクラスを提供します-
- 2つのXMLの違い(DiffおよびDetailedDiffクラス経由)。
- XMLの有効性(Validatorクラス経由)。
- XSLTを使用してXMLを変換した結果(Transformクラス経由)。
- XML上のXPath式の評価(XpathEngineインターフェースを実装するクラスを介して)。
- DOM Traversalによって(NodeTestクラスを介して)公開されるXMLの個々のノード。
比較したい2つのXMLがあり、それらが等しいことを断定するとします。 このような簡単なテストクラスを書くことができます-
import org.custommonkey.xmlunit.XMLTestCase;
public class MyXMLTestCase extends XMLTestCase {
//this test method compare two pieces of the XML
@Test
public void testForXMLEquality() throws Exception {
String myControlXML = "<msg><uuid>0x00435A8C</uuid></msg>";
String myTestXML = "<msg><localId>2376</localId></msg>";
assertXMLEqual("Comparing test xml to control xml", myControlXML, myTestXML);
}
}
モックオブジェクト
単体テストでは、モックオブジェクトは複雑で実際の(非モック)オブジェクトの動作をシミュレートできるため、実際のオブジェクトが単体テストに組み込むことが非現実的または不可能な場合に役立ちます。
モックオブジェクトでテストするための一般的なコーディングスタイルは次のとおりです-
- モックオブジェクトのインスタンスを作成します。
- モックオブジェクトに状態と期待値を設定します。
- パラメーターとしてモックオブジェクトを使用してドメインコードを呼び出します。
- モックオブジェクトの一貫性を確認します。
以下は、Jmockを使用したMockObjectの例です。
import org.jmock.Mockery;
import org.jmock.Expectations;
class PubTest extends TestCase {
Mockery context = new Mockery();
public void testSubReceivesMessage() {
//set up
final Sub sub = context.mock(Sub.class);
Pub pub = new Pub();
pub.add(sub);
final String message = "message";
//expectations
context.checking(new Expectations() {
oneOf (sub).receive(message);
});
//execute
pub.publish(message);
//verify
context.assertIsSatisfied();
}
}