JaveEEテスト:ステップ2-JUNITカスタム
5219 ワード
カスタムローダ
我々のテストベースクラスではSpring-testが提供するローダを使用しています
@RunWith(SpringJUnit4ClassRunner.class)
上記の効果を達成するには、独自のローダをカスタマイズする必要があります.
public class MyJUnit4ClassRunner extends SpringJUnit4ClassRunner{
public MyJUnit4ClassRunner(Class> clazz) throws InitializationError {
super(clazz);
}
}
SpringJUnit 4 ClassRunnerのソースコードを見て、彼は私たちのローダーをどのように書くべきか教えてくれました.次は私たちが書いたローダーです
import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.InitializationError;
import org.junit.runners.model.Statement;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
public class MyJUnit4ClassRunner extends SpringJUnit4ClassRunner{
private Class> clazz;
public MyJUnit4ClassRunner(Class> clazz) throws InitializationError {
super(clazz);
this.clazz = clazz;
}
// BeforeClass
@Override
protected Statement withBeforeClasses(Statement statement) {
final Statement junitStatement = super.withBeforeClasses(statement);
return new Statement() {
@Override
public void evaluate() throws Throwable {
System.out.println("Before Class: " + clazz.getName());
junitStatement.evaluate();
}
};
}
// Before
@Override
protected Statement withBefores(final FrameworkMethod frameworkMethod, Object testInstance, Statement statement) {
final Statement junitStatement = super.withAfters(frameworkMethod, testInstance, statement);
return new Statement() {
@Override
public void evaluate() throws Throwable {
System.out.println(" : " + clazz.getName() + "-- : " + frameworkMethod.getName() + " !");
junitStatement.evaluate();
}
};
}
// AfterClass
@Override
protected Statement withAfterClasses(Statement statement) {
final Statement junitStatement = super.withAfterClasses(statement);
return new Statement() {
@Override
public void evaluate() throws Throwable {
junitStatement.evaluate();
System.out.println("After Class: " + clazz.getName());
}
};
}
// after
@Override
protected Statement withAfters(final FrameworkMethod frameworkMethod, Object testInstance, Statement statement) {
final Statement junitStatement = super.withAfters(frameworkMethod, testInstance, statement);
return new Statement() {
@Override
public void evaluate() throws Throwable {
System.out.println(" : " + clazz.getName() + "-- : " + frameworkMethod.getName() + " !");
junitStatement.evaluate();
}
};
}
}
ローダの使用
私たちのテストベースクラスを変更すればいいです.
//@RunWith(SpringJUnit4ClassRunner.class)
@RunWith(MyJUnit4ClassRunner.class)
テストを行うと、次のような出力が出ます.
: com.yun.spring.UserAssignServiceTest-- : insert !
: com.yun.spring.UserAssignServiceTest-- : insert !
カスタムリスナー
public class DBUnitTestExecutionListener implements TestExecutionListener {
@Override
public void beforeTestClass(TestContext testContext) throws Exception {
}
@Override
public void prepareTestInstance(TestContext testContext) throws Exception {
}
/**
*
*/
@Override
public void beforeTestMethod(TestContext testContext) throws Exception {
System.out.println(this.getClass().getName() + "--" + testContext.getTestMethod().getName() + " ");
}
@Override
public void afterTestMethod(TestContext testContext) throws Exception {
System.out.println(this.getClass().getName() + "--" + testContext.getTestMethod().getName() + " ");
}
@Override
public void afterTestClass(TestContext testContext) throws Exception {
}
}
Listenerの使用
前述のBaseJunit 4 Testクラスの変更
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({
"classpath:test-hcm-context.xml",
"classpath:test-hcm-jpa.xml",
"classpath:test-hcm-servlet.xml",
"classpath:test-hcm-memcache.xml"})
// , , !
@Transactional
// (transactionManager = "transactionManager"),
// (defaultRollback = true)。 !
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
@TestExecutionListeners( {
DependencyInjectionTestExecutionListener.class,
TransactionalTestExecutionListener.class,
DBUnitTestExecutionListener.class })
public class BaseJunit4Test {
}
@TestExecutionListenersのパラメータは、いくつかの操作を完了するためにカスタムリスナーを書きます.
TestRuleの使用
Ruleは、セルクラスでドメインを定義するための寸法です.Ruleと呼ばれていますが、テストを実行する前後に役立つコードを追加するブロック/Interceptorとして機能します.ここでは使っていないので、興味があれば自分でドキュメントを見てみましょう.
予告
次にhamcrestの使い方を紹介します