gpt4 book ai didi

java - 自定义注释作为 JUnit 中的列表注入(inject)

转载 作者:行者123 更新时间:2023-11-30 05:27:57 26 4
gpt4 key购买 nike

我想要一个自定义 JUnit 注释,如果该注释出现在测试方法上,它应该使 List该对象可用于该测试方法,主要是通过作为方法参数。

Company是一个外部类对象,其中包含 List<Employee> ,并且测试需要具有灵 active ,可以拥有默认员工列表或提供自定义列表。

对于我的测试方法,我正在相应测试中处理注释,但是如何为所有测试文件运行此注释(类似于 @BeforeMethod ),并且如果我的自定义注释存在于方法上,则注入(inject)它如List<Employee>

@Test
@CompanyAnnotation(salary = 5)
@CompanyAnnotation(salary = 50)
public void testCompany(// Want to inject as method parameter of List<Employee> list) {

for(Method method : CompanyTest.class.getDeclaredMethods()) {

CompanyAnnotation[] annotations = method.getAnnotationsByType(
CompanyAnnotation.class);

for(CompanyAnnotation d : annotations) {
System.out.println(b);
}

}

}

===

class Company {
// many other properties
List<Employee> employeeList;

}

class Employee {
// more properties
Integer age;
}

class CompanyBuilder {

int defaultEmployeeSize = 10;

public Company create(List<Employee> incoming) {
List<Employee> employees = new ArrayList<>();

employees.addAll(incoming);

if ( employees.size() < defaultEmployeeSize ) {
for(int i = 0; i < (defaultEmployeeSize - employees.size()); i++) {
employee.add(new Employee());
}
}
return employees;
}
}

最佳答案

以下是如何解决该问题的概述:

  1. 创建注释 CompanyAnnotation,使其具有 @ExtendWith(CompanyAnnotationProcessor) 作为元注释。这将指示 Jupiter 使用 CompanyAnnotationProcessor 作为所有用 CompanyAnnotation 注释的测试方法的扩展。此外,CompanyAnnotation 必须是可重复的,这需要诸如 CompanyAnnotationList 注释之类的东西。

  2. CompanyAnnotationProcessor 实现为 ParameterResolver

  3. 现在您必须在 CompanyAnnotationProcessor.resolveParameter 中获取原始方法注释。您可以通过

    来做到这一点
    • 首先获取方法:Method method = (Method)parameterContext.getDeclaringExecutable();
    • 然后评估方法注释:org.junit.platform.commons.support.AnnotationSupport.findRepeatableAnnotations(method, CompanyAnnotation.class);
      顺便说一句,AnnotationSupport 需要将 junit-platform-commons 添加到您的依赖项中。

现在您已具备创建具有注释中定义的薪水的员工的所有要素。

关于java - 自定义注释作为 JUnit 中的列表注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58179121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com