JUnit:测试带注解的方法时,测试将忽略注解

wmtdaxz3  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(188)

我有一些很奇怪问题,这是我的方法

@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();
}

通过忽略,我的意思是,当运行测试时,它只是绕过注解,就像它根本不存在一样

9jyewag0

9jyewag01#

注解不是被执行的代码,而是需要注解处理器来处理的元信息。
以Java EE为例,注解由容器(例如,您使用的应用服务器)处理,并导致执行其他操作,如设置事务或在实体和表之间进行Map。
因此,在您的情况下,您似乎希望Spring对注解做一些事情(您在调试应用程序时会遇到)。当运行测试用例时,没有框架或容器做这件事,因此您必须模仿或模拟它,或者使用类似Arquillian的东西在所需的环境(例如容器)中运行您的测试。

whlutmcx

whlutmcx2#

请参阅后面的答案-〉https://stackoverflow.com/a/60299629/3661748
本质上,你必须创建一个验证器,然后使用这个验证器来验证类。
该验证程序将触发注解并将违规收集到一个可迭代的集合中。
如果需要进行彻底的测试,可以提取这些违规来验证单个消息。

相关问题