为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

米脂 2023-08-16 10:01:23
假设我有一个@BeforeEach方法,它使用外部方法来获取值并使用该值进行设置:@BeforeEachvoid foo() {  int bar = getBarFromSomething();  setupSomethingWithBar(bar);}现在,我希望能够在测试用例之前调用该方法之后将 的值bar(每次getBarFromSomething()调用时可能会更改)传递给每个单独的测试用例。foo()我想这样做,以便我可以使用我在@BeforeEach foo()方法调用中设置的参数来测试某些内容:@Testvoid test_baz(int bar) {  assertEquals(bar, 5);}我将如何将调用中的参数传递@BeforeEach foo()给每个单独的@Test案例?我认为参数化测试不会起作用,因为生成的方法可能会输出不同的结果,因此每个案例运行bar只需调用一次,并且需要用于在调用中设置某些内容。@BeforeEach@Testfoo()
查看完整描述

2 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

只需将方法变量移动到成员变量...就像这样:


int bar = getBarFromSomething();

@BeforeEach

void foo() {

    setupSomethingWithBar(bar);

}

然后


@Test

void test_baz() {

    assertEquals(bar, 5);

}

应该管用


查看完整回答
反对 回复 2023-08-16
?
月关宝盒

TA贡献1772条经验 获得超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()

}


查看完整回答
反对 回复 2023-08-16
  • 2 回答
  • 0 关注
  • 93 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信