假設我有一個@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
提交
取消