我有一些很奇怪问题,这是我的方法
@SomeAnnotation(value = "test")
public void doSomethink() {
..
}
当我使用我的应用程序时,everythink工作正常(当在调试中调用方法doSomethink()
时,它也进入注解内部),但是当我运行如下测试时
@Test
public void testDoSomethink() {
service.doSomethink();
}
我的测试完全忽略了注解,直接进入了doSomethink
方法。我是不是遗漏了一些东西?我认为这段代码已经足够了,但是如果你需要更多的代码,请告诉我。
某些注解
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();
}
通过忽略,我的意思是,当运行测试时,它只是绕过注解,就像它根本不存在一样
2条答案
按热度按时间9jyewag01#
注解不是被执行的代码,而是需要注解处理器来处理的元信息。
以Java EE为例,注解由容器(例如,您使用的应用服务器)处理,并导致执行其他操作,如设置事务或在实体和表之间进行Map。
因此,在您的情况下,您似乎希望Spring对注解做一些事情(您在调试应用程序时会遇到)。当运行测试用例时,没有框架或容器做这件事,因此您必须模仿或模拟它,或者使用类似Arquillian的东西在所需的环境(例如容器)中运行您的测试。
whlutmcx2#
请参阅后面的答案-〉https://stackoverflow.com/a/60299629/3661748
本质上,你必须创建一个验证器,然后使用这个验证器来验证类。
该验证程序将触发注解并将违规收集到一个可迭代的集合中。
如果需要进行彻底的测试,可以提取这些违规来验证单个消息。