[英]How to have multiple setups for different sets of JUnit Tests?
我最近才開始學習 JUnit 並遇到以下問題。
看看下面的 class
class MyClass {
String a;
public MyClass(String a) {
this.a=a;
String doSomething(String a) {
if( a.isEmpty() )
return "isEmpty";
else
return"isNotEmpty";
}
我想在這兩種情況下測試上述方法。 如果我繼續編寫測試用例的一般結構,它將看起來像這樣:
class MyClassTest {
MyClass myClass;
@BeforeEach
void setUp() {
myClass=new MyClass("sampleString");
}
@Test
void doSomethingTest() {
Assertions.equal("isNotEmpty", myClass.doSomething());
}
}
但是,為了測試空字符串條件,我需要另一個設置方法,而不是"sampleString"
,我傳遞一個空字符串。
以下是我能想到的方法以及每種方法的問題:
"sampleString"
那么這沒有意義。 同樣,我們可以為這些重復代碼使用單獨的方法,並在每個測試用例中單獨調用它,但這違背了使用 steup 方法的目的。 假設我想使用兩種不同的設置方法,有沒有辦法這樣做?出於說明目的,此示例保持簡單。
您始終可以在測試方法中准備非常用數據。 與使用參數化測試相比,我一直認為這種方式更容易。 您不能在 1 個文件中混合參數化和非參數化測試。
@Test
void doSomething_nullString()
{
myClass = new MyClass(null);
Assert.assertNull(myClass.doSomething());
}
@Test
void doSomething_emptyString()
{
myClass = new MyClass("");
Assert.assertEquals("", myClass.doSomething());
}
@Test
void doSomething_nonEmptyString()
{
myClass = new MyClass("sampleString");
Assert.assertEquals("sampleString", myClass.doSomething());
}
或者,您始終可以在測試 class 中使用輔助方法。
private MyClass createTestObject_nonNullString() {
return new MyClass("nonNullString");
}
private MyClass createTestObject_nullString() {
return new MyClass(null);
}
@Test
public void doSomething_sample() {
MyClass test = createTestObject_nonNullString();
// perform test
}
在帶有 @Nested 注釋的內部 class 中使用相同的設置對測試進行@Nested
。 每個嵌套測試 class 可以在本地@BeforeEach
方法中擁有自己的設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.