ユニットテストの実行/デバッグ時に、IntelliJが実際にランタイム IDEA内の@NotNullの検証を行うのは非常に驚きでした。この同じ機能を私のMavenビルドに追加することは可能ですか? (?何瓶/ JVMの設定私が必要です)@NotNullアノテーションのランタイム処理を追加する方法
9
A
答えて
0
私はAOPの道を行くだろう:あなたはjavax.validation互換性のあるバリデータ(Hibernate Validatorは、リファレンス実装である)を必要とするすべての
まず。
Validatorインスタンスを持つaspectjアスペクトを作成し、すべてのメソッドパラメータで検証エラーをチェックします。
public aspect ValidationAspect {
private final Validator validator;
{
final ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
}
pointcut serviceMethod() : execution(public * com.yourcompany**.*(..));
before() : serviceMethod(){
final Method method = (Method) thisJoinPoint.getTarget();
for(final Object arg : thisJoinPoint.getArgs()){
if(arg!=null) validateArg(arg,method);
}
}
private void validateArg(final Object arg, final Method method) {
final Set<ConstraintViolation<Object>> validationErrors = validator.validate(arg);
if(!validationErrors.isEmpty()){
final StringBuilder sb = new StringBuilder();
sb.append("Validation Errors in method ").append(method).append(":\n");
for (final ConstraintViolation<Object> constraintViolation : validationErrors) {
sb.append(" - ").append(constraintViolation.getMessage()).append("\n");
}
throw new RuntimeException(sb.toString());
}
}
}
テストおよび/または製品コードにその側面を織りaspectj-maven-pluginを使用します。ここでは、始めるために迅速なバージョンがあります。
この機能のみをテストする場合は、aspectj-pluginの実行をプロファイルに入れます。
4
IDEAは、そのようなバリデーションを追加するために、バイトコードをインスツルメントする独自の方法を使用しています。コマンドラインビルドでは、instrumentationを行うjavac2 Antタスクを提供します(標準のjavacタスクを拡張します)。 IDEAからAntビルドを生成する場合、javac2を使用するオプションがあります。
We don't provide similar Maven plug-in yetしかし、there is third-party version(これは少し古いようです)。
0
JUnitテストでアノテーションの検証を行うことができます。あなたの毒が春であれば
import java.util.Set;
import javax.validation.ConstraintViolation;
import junit.framework.Assert;
import org.hibernate.validator.HibernateValidator;
import org.junit.Before;
import org.junit.Test;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
public class Temp {
private LocalValidatorFactoryBean localValidatorFactory;
@Before
public void setup() {
localValidatorFactory = new LocalValidatorFactoryBean();
localValidatorFactory.setProviderClass(HibernateValidator.class);
localValidatorFactory.afterPropertiesSet();
}
@Test
public void testLongNameWithInvalidCharCausesValidationError() {
final ProductModel productModel = new ProductModel();
productModel.setLongName("A long name with\t a Tab character");
Set<ConstraintViolation<ProductModel>> constraintViolations = localValidatorFactory.validate(productModel);
Assert.assertTrue("Expected validation error not found", constraintViolations.size() == 1);
}
}
、tools.jarのための交換がjavac2.jarですこれらSpring Unit Tests
関連する問題
- 1. ランタイム中に追加されたコントロールのイベントを処理する
- 2. APTネストされたアノテーション付きクラスのアノテーションを処理する方法
- 3. フィールドのプログラムによる追加を処理する方法は?
- 4. Eclipse Javaアノテーション処理
- 5. 春のセキュリティで@secureアノテーションを追加する方法
- 6. ランタイム依存性の処理
- 7. UIImageview iPhoneプログラミングにアノテーションを追加する方法
- 8. Java;ランタイム解釈;プラグインを追加する方法
- 9. Android Widgets:ランタイム時にRemoteViewにビューを追加する方法
- 10. solr:SolrQueryResponseにコンテンツ処理を追加する
- 11. jpa1 @notnullアノテーションを使用することはできますか?
- 12. Playを作る方法!フレームワーク1.4.x Javaアノテーションを前処理しますか?
- 13. ORMLite - 参加結果の処理方法
- 14. WindowManagerでビューを追加したときにkeyeventsを処理する方法は?
- 15. ランタイムとデスティネーションで作成されたサブコンポーネントとプロパティを処理する方法は?
- 16. ランタイムにフォントressourceを追加
- 17. 反復処理中にListItemをリストに追加する方法(C#)
- 18. ランタイムでQRadioButtonsを追加する
- 19. 処理3をJpanelに追加
- 20. symfonyカスタムフォームフィールドの追加と処理
- 21. Javaで@notnullアノテーションを使用する2013年の状況は何ですか?
- 22. GridViewのコードでランタイム中に列と行を動的に追加する方法
- 23. 処理中にコントロールの更新を処理する方法は?
- 24. XSLT:ファイルの末尾に処理命令を追加する
- 25. メニュー項目にショートカットキーを追加するときに複数のコントロールのコピーを処理する方法は?
- 26. VS2008のバグを処理する方法
- 27. DataGridViewLinkColumnのクリックイベントを処理する方法
- 28. サーバーのスケーラビリティを処理する方法
- 29. 空のソケットバッファを処理する方法
- 30. ShiroのUnauthenticatedExceptionを処理する方法
を見てみましょうか? – krosenvold
いいえ、それはGUIフォームと注釈計測を追加することでAnt javacタスクを拡張するAntタスクです。このタスクのソースコードは、IDEA Community Editionのgitリポジトリにあります。 – CrazyCoder
@CrazyCoderヌルポインタの動作をテストするユニットテストの処理をオフに切り替える方法はありますか? iE。 '@ org.junit.Test(expected = NullPointerException.class)'テスト? – Martin