将参数从JUnit 5 @BeforeEach传递到单个测试

jsw*_*wny 0 java junit junit5

假设我有一个@BeforeEach使用外部方法来获取值并使用该值进行设置的方法:

@BeforeEach
void foo() {
  int bar = getBarFromSomething();
  setupSomethingWithBar(bar);
}
Run Code Online (Sandbox Code Playgroud)

现在,我希望能够在方法在测试用例之前被调用之后,将值bar(每次getBarFromSomething()调用可能会改变)传递给每个单独foo()的测试用例。我想这样做,以便可以使用在@BeforeEach foo()方法调用中设置的参数来测试某些内容:

@Test
void test_baz(int bar) {
  assertEquals(bar, 5);
}
Run Code Online (Sandbox Code Playgroud)

我应该如何将参数从@BeforeEach foo()调用传递给每个@Test个案?我不认为参数化测试会起作用,因为生成的方法bar可能会输出不同的结果,因此每次每次运行都只需要调用一次,@BeforeEach并且@Test需要在foo()调用中使用它进行设置。

Bil*_*l K 5

只需将方法变量移动到成员变量即可,如下所示:

int bar = getBarFromSomething();
@BeforeEach
void foo() {
    setupSomethingWithBar(bar);
}
Run Code Online (Sandbox Code Playgroud)

然后

@Test
void test_baz() {
    assertEquals(bar, 5);
}
Run Code Online (Sandbox Code Playgroud)

应该管用