Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 如何在JUnit5中将参数传递给扩展类构造函数_Spring Boot_Hibernate_Junit5_Lombok - Fatal编程技术网

Spring boot 如何在JUnit5中将参数传递给扩展类构造函数

Spring boot 如何在JUnit5中将参数传递给扩展类构造函数,spring-boot,hibernate,junit5,lombok,Spring Boot,Hibernate,Junit5,Lombok,我在将参数从测试类传递到其扩展类构造函数时遇到了一个问题。 从JUnit4迁移到JUnit5期间出现问题。(对于JUnit4,工作良好) 在JUnit4中,测试类如下所示: public class TestClass{ @Rule @Autowired public SupportClass supportClass; } 和支持类: @Component @RequiredArgsConstructor public class SupportCl

我在将参数从测试类传递到其扩展类构造函数时遇到了一个问题。 从JUnit4迁移到JUnit5期间出现问题。(对于JUnit4,工作良好) 在JUnit4中,测试类如下所示:

public class TestClass{
    @Rule
    @Autowired
    public SupportClass supportClass;
}
和支持类:

   @Component
   @RequiredArgsConstructor
   public class SupportClass implements TestRule {
        private final EntityManager entityManager;

        @Override
        public Statement apply(Statement base, Description description) {
        return new Statement() {
            @Override
            public void evaluate() throws Throwable {
                final Statistics statistics = ((Session) entityManager.getDelegate()).getSessionFactory().getStatistics();
                statistics.clear();

                base.evaluate();
            }
         };
        }
   }
在JUnit5中,我尝试做(测试类):

支持类外观:

   @Component
   @RequiredArgsConstructor
   public class SupportClass implements AfterEachCallback, BeforeEachCallback {
        private final EntityManager entityManager;

    @Override
    public void beforeEach(ExtensionContext extensionContext) throws Exception {
        final Statistics statistics = ((Session) entityManager.getDelegate()).getSessionFactory().getStatistics();
        statistics.clear();

    }

    @Override
    public void afterEach(ExtensionContext extensionContext) throws Exception {
        final Statistics statistics = ((Session) entityManager.getDelegate()).getSessionFactory().getStatistics();
        statistics.clear();

    }
   }
当我试图执行测试时,我得到
java.lang.NoSuchMethodException:.SupportClass.init()异常。我知道这与缺少非args构造函数有关。不幸的是,我的SupportClass需要这个参数才能工作。问题是如何将这个entityManager从测试类传递到支持作为参数?

这里是一个草图。未检查编译错误、未导入以及可能并非所有详细信息:

@SpringBootTest
public class TestClass{

    @Autowired
    @RegisterExtension
    SupportClass support;

    @Test
    void myTest() {...}
}

public class SupportClass implements AfterEachCallback, BeforeEachCallback {
    private final EntityManager entityManager;

    SupportClass(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    @Override
    public void beforeEach(ExtensionContext extensionContext) throws Exception {
        final Statistics statistics = ((Session) entityManager.getDelegate()).getSessionFactory().getStatistics();
        statistics.clear();
    }

    @Override
    public void afterEach(ExtensionContext extensionContext) throws Exception {
        final Statistics statistics = ((Session) entityManager.getDelegate()).getSessionFactory().getStatistics();
        statistics.clear();

    }
}

我认为
SupportClass
不是一个好名字,但那是另一回事。

看一看,他们试图将其置于SupportClass之上,但没有任何帮助。我读过这个文档,但我找不到任何解释如何准确地做到这一点。我也尝试过这个教程,参数解析器接口,但仍然没有效果
@SpringBootTest
public class TestClass{

    @Autowired
    @RegisterExtension
    SupportClass support;

    @Test
    void myTest() {...}
}

public class SupportClass implements AfterEachCallback, BeforeEachCallback {
    private final EntityManager entityManager;

    SupportClass(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    @Override
    public void beforeEach(ExtensionContext extensionContext) throws Exception {
        final Statistics statistics = ((Session) entityManager.getDelegate()).getSessionFactory().getStatistics();
        statistics.clear();
    }

    @Override
    public void afterEach(ExtensionContext extensionContext) throws Exception {
        final Statistics statistics = ((Session) entityManager.getDelegate()).getSessionFactory().getStatistics();
        statistics.clear();

    }
}