Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.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
Java 在JUnit规则运行之前,使用Spring TestExecutionListener初始化状态_Java_Spring_Spring Test - Fatal编程技术网

Java 在JUnit规则运行之前,使用Spring TestExecutionListener初始化状态

Java 在JUnit规则运行之前,使用Spring TestExecutionListener初始化状态,java,spring,spring-test,Java,Spring,Spring Test,我想在每个Spring引导JUnit测试用例之前使用TestExecutionListener初始化状态。在调用JUnit@Rules的相应回调之前,需要运行此初始化 我本以为beforeTestMethod会适合这种情况,因为它的JavaDoc注释说 在执行底层测试框架的生命周期回调之前预处理测试 规则将“before”回调用于测试,因此我希望beforeTestMethod在规则之前执行。但是,调试器显示情况并非如此 这是我的代码结构: @RunWith(SpringRunner.clas

我想在每个Spring引导JUnit测试用例之前使用
TestExecutionListener
初始化状态。在调用JUnit
@Rule
s的相应回调之前,需要运行此初始化

我本以为
beforeTestMethod
会适合这种情况,因为它的JavaDoc注释说

在执行底层测试框架的生命周期回调之前预处理测试

规则将“before”回调用于测试,因此我希望
beforeTestMethod
在规则之前执行。但是,调试器显示情况并非如此


这是我的代码结构:

@RunWith(SpringRunner.class)
@SpringBootTest
@TestExecutionListeners(listeners = MyTestExecutionListener.class, mergeMode = MergeMode.MERGE_WITH_DEFAULTS)
public class MyTest {

    @Autowired
    @Rule
    public MyRule rule;

    @Test
    public void test1() {
        // ...
    }

    // ... more tests
}
我希望这些方法按顺序执行

  • beforeTestMethod()
  • rule.before()
  • test1()
但实际的顺序是

  • rule.before()
  • beforeTestMethod()
  • test1()

你知道我做错了什么,或者我应该使用哪个
TestExecutionListener
方法吗?

如果你想在执行
规则之前初始化每个测试的状态,你应该使用
TestExecutionListener
接口的
prepareTestInstance
方法

@Override
public void prepareTestInstance(TestContext testContext) {
    System.out.println("inside prepareTestInstance");
}
这样,您将按以下顺序执行这些方法:

  • prepareTestInstance()
  • rule.before()
  • test1()
请注意,
preparetestistance
将在每个测试方法之前执行

@Component
public class AutoLogin extends ExternalResource {

    @Override
    protected void before() {
        // ...
    }
}
@Override
public void prepareTestInstance(TestContext testContext) {
    System.out.println("inside prepareTestInstance");
}