ユニットテストの実行/デバッグ時に、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. @NotNull javaxアノテーションとIntellij @NotNullアノテーション
- 2. ランタイム中に追加されたコントロールのイベントを処理する
- 3. Javaアノテーション処理 - すでに処理されたコードを処理する方法?
- 4. @NotNullと@Nullable、矛盾Javaアノテーション
- 5. APTネストされたアノテーション付きクラスのアノテーションを処理する方法
- 6. ランタイム時に@NotNullが機能する
- 7. 実生活プロジェクトのランタイム例外を処理する方法
- 8. フィールドのプログラムによる追加を処理する方法は?
- 9. Eclipse Javaアノテーション処理
- 10. iOSリモートメッセージで追加データGCMを処理する方法
- 11. 処理中に外部ライブラリを追加する方法
- 12. ランタイム依存性の処理
- 13. @CompileStaticアノテーションをgroovyのパッケージスコープに追加する方法
- 14. 春のセキュリティで@secureアノテーションを追加する方法
- 15. Spring MVCアノテーション処理を停止する
- 16. JSweetでJavaアノテーションを処理する
- 17. リモート・サーバーのibm mobilefirst 7.1でランタイムを追加する方法
- 18. ランタイムをシリアル化する方法Jsonに「プロパティ」を追加
- 19. 複数のルートを処理する単一のメソッドを追加する方法
- 20. UIImageview iPhoneプログラミングにアノテーションを追加する方法
- 21. JavaPoet - アノテーションをフィールドに追加する方法は?
- 22. kafkastreams - 処理能力を追加する
- 23. solr:SolrQueryResponseにコンテンツ処理を追加する
- 24. Java;ランタイム解釈;プラグインを追加する方法
- 25. Android Widgets:ランタイム時にRemoteViewにビューを追加する方法
- 26. ランタイムでレイアウトにボタンを追加する方法
- 27. jpa1 @notnullアノテーションを使用することはできますか?
- 28. 既存のテーブルの列にnotnull制約を追加する
- 29. AEM 6.3 - FelixをOSGiアノテーションに移行する:propertyPrivateの処理方法?
- 30. pyplotのアノテーションにクリックイベントを追加する
を見てみましょうか? – krosenvold
いいえ、それはGUIフォームと注釈計測を追加することでAnt javacタスクを拡張するAntタスクです。このタスクのソースコードは、IDEA Community Editionのgitリポジトリにあります。 – CrazyCoder
@CrazyCoderヌルポインタの動作をテストするユニットテストの処理をオフに切り替える方法はありますか? iE。 '@ org.junit.Test(expected = NullPointerException.class)'テスト? – Martin