私はテストライフをもっと簡単にするために、MethodRuleと@ Rule-annotationを作成しました。 特定の例外がスローされたかどうかをチェックし、exception-messageが指定されたメッセージと等しいかどうかをチェックします。JUnit MethodRuleは1行だけをテストします
これで、テストする行が多いtestmethodを実行すると、最初の行だけが表示され、準備が整っています。どのようにしてテストメソッドのすべての行がテストされるのですか?
これは私のコードです: 注釈:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface ExpectedDomeinValidatieMessage {
String value() default "";
String contains() default "";
}
はMethodRule:
@Override
public Statement apply(final Statement base, final FrameworkMethod method, final Object target) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
ExpectedDomeinValidatieMessage message = method.getAnnotation(ExpectedDomeinValidatieMessage.class);
if (message == null) {
base.evaluate();
} else {
try {
base.evaluate();
Assert.fail("DomeinValidatieException not thrown");
} catch (DomeinValidatieException e) {
if (StringUtils.isNotBlank(message.value())) {
if (!e.getMessage().equals(message.value())) {
throwException(e, "", message.value(), e.getMessage());
}
}
if (StringUtils.isNotBlank(message.contains())) {
if (!e.getMessage().contains(message.contains())) {
throwException(e, "Segment niet gevonden:", message.contains(), e.getMessage());
}
}
}
}
}
private void throwException(Throwable exception, String message, String expected, String actual) {
ComparisonFailure cf = new ComparisonFailure(message, expected, actual);
cf.setStackTrace(exception.getStackTrace());
throw cf;
}
};
は使用方法:私はこのようにそれを使用する場合は
@Test
@ExpectedDomeinValidatieMessage("[Werkzaamheden] WerkzaamMetGevaarlijkeStoffen niet gevuld")
public void valideerWerkzaamMetGevaarlijkeStoffen() throws DomeinValidatieException {
aanvraag.getVerzekerde().getWerkzaamheden().setWerkzaamMetGevaarlijkeStoffen(null);
validator.valideer();
}
、それだけで最初のテストをテスト方法で:
@Test
@ExpectedDomeinValidatieMessage("[Werkzaamheden] WerkzaamMetGevaarlijkeStoffen niet gevuld")
public void valideerWerkzaamMetGevaarlijkeStoffen() throws DomeinValidatieException {
aanvraag.getVerzekerde().getWerkzaamheden().setWerkzaamMetGevaarlijkeStoffen(null);
validator.valideer(); //Only this one is tested
aanvraag.getVerzekerde().getWerkzaamheden().setWerkzaamMetGevaarlijkeStoffen("bla");
validator.valideer(); //This is NOT tested
}
Matthew、あなたは失敗の状況を説明します。もちろん、それは停止し、それは期待されています。しかし、最初のテストラインがOKであれば、2番目のテストラインはテストされません。 –
解決策を編集して、何が起こっているのかを詳しく説明します。 –
私はそれを得ると思います。もちろん、例外をスローして制御を渡します。だから私はエラーとして記録されないようにするために、返品のポイントを超えています。私はTestRuleを見ていきます。 –