我有一个非常奇怪的问题。继承人我的方法
@SomeAnnotation(value = "test")
public void doSomethink() {
..
}
当我使用我的应用程序时,everythink工作正常(在调试时调用方法doSomethink()
它也会在内部注释中),但是当我运行下面的测试时
@Test
public void testDoSomethink() {
service.doSomethink();
}
我的测试完全忽略注释并直接进入doSomethink
方法。我错过了一些想法吗?我认为这段代码已足够,但如果您需要更多代码,请告诉我。
SomeAnnotation
package org.springframework.security.access.prepost;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface SomeAnnotation{
String value();
}
忽略我的意思是,当通过测试时,它只是绕过注释,就像它甚至没有
一样答案 0 :(得分:1)
注释不是执行的代码,但它是元信息,需要注释处理器对其执行某些操作。
例如,对于Java EE,注释由容器(例如您使用的app服务器)处理,并导致执行其他操作,例如设置事务或在实体和表之间进行映射。
因此,在您的情况下,您似乎希望Spring使用注释(在调试应用程序时遇到)进行操作。运行测试用例时,没有框架或容器可以执行此操作,因此您必须模拟或模拟它,或使用Arquillian之类的东西在所需环境(例如容器)中运行测试。