假设我有一个@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);
}
应该管用
月关宝盒
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()
}
添加回答
举报
0/150
提交
取消