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

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


@BeforeEach

void foo() {

  int bar = getBarFromSomething();

  setupSomethingWithBar(bar);

}

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


@Test

void test_baz(int bar) {

  assertEquals(bar, 5);

}

我将如何将调用中的参数传递@BeforeEach foo()给每个单独的@Test案例?我认为参数化测试不会起作用,因为生成的方法可能会输出不同的结果,因此每个案例运行bar只需调用一次,并且需要用于在调用中设置某些内容。@BeforeEach@Testfoo()


米脂
浏览 100回答 2
2回答

拉莫斯之舞

只需将方法变量移动到成员变量...就像这样:int bar = getBarFromSomething();@BeforeEachvoid foo() {    setupSomethingWithBar(bar);}然后@Testvoid test_baz() {    assertEquals(bar, 5);}应该管用

月关宝盒

没有特定于大学的设施来支持您的想法。除非您使用@TestInstance(Lifecycle.PER_CLASS),否则将为每个测试调用创建测试类的新实例。但更好的方法是使用带有@MethodSource的参数化测试,并在给定部分的某处测试中正确执行设置。这正是 @ParametrizedTests 想要解决的任务。@TestInstance(TestInstance.Lifecycle.PER_CLASS)class TestSample {   @ParameterizedTest   @MethodSource("bars")   fun isFive(bar:Int){       setupSomethingWithBar(bar)         assertEquals(bar, 5)   }   fun bars() = (1..10).asSequence().asStream()}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java