Spring Beginner здесь. < /p>
Я делаю две пользовательские аннотации @Satisfy и @Verify, предназначенные для отслеживания требований
в коде. в тестовом случае JUNIT < /li>
< /ul>
Каждый из них имеет соответствующий @aspept, который в этом фрагменте только что печатает сообщение, но на самом деле они используются для публикации обновления в Gitlab API, чтобы пометить требования @Sift atsiste, что есть в аспекте @ реализует требуемый код, например Дополнение класса. Я провел весь день в поисках решений, и я подозреваю, что аспекты могут быть не в состоянии использоваться в тестовых случаях? не работает.package com.example.demo;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME) // The annotation will be available at runtime
@Target(ElementType.METHOD) // This annotation can only be applied to methods
public @interface Satisfy
{
String requirementId() default "No requirementId provided";
}
< /code>
проверить: < /p>
package com.example.demo;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME) // The annotation will be available at runtime
@Target(ElementType.METHOD) // This annotation can only be applied to methods
public @interface Verify
{
String requirementId() default "No requirementId provided";
}
< /code>
seathyaspect: < /p>
package com.example.demo;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.lang.reflect.Method;
@Aspect
@Component
public class SatisfyAspect
{
@Around("@annotation(com.example.demo.Satisfy)")
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable
{
System.out.println("ENTER SatisfyAspect");
Object proceed = joinPoint.proceed();
return proceed;
}
}
< /code>
VerifyAspect: < /p>
package com.example.demo;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.lang.reflect.Method;
@Aspect
@Component
public class VerifyAspect
{
@Around("@annotation(com.example.demo.Verify)")
public Object verify(ProceedingJoinPoint joinPoint) throws Throwable
{
System.out.println("ENTER VerifyAspect");
Object proceed = joinPoint.proceed();
return proceed;
}
}
< /code>
Класс добавления с требованием добавления:
Требования состоит из идентификатора проекта Gitlab - проблема IID < /p>
package com.example.demo;
import org.springframework.stereotype.Component;
@Component
public class Addition
{
@Satisfy(requirementId="12345678-1")
int add(int a, int b)
{
return a + b;
}
}
< /code>
testapplication: < /p>
package com.example.demo;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class DemoApplicationTests
{
@Autowired
private Addition addition;
@Test
void contextLoads()
{
}
@Test
@Verify(requirementId="12345678-1")
void testAdd()
{
assert(addition.add(1, 2) == 3);
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... annotation