簡體   English   中英

如何為不同的 JUnit 測試集進行多個設置?

[英]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" ,我傳遞一個空字符串。

以下是我能想到的方法以及每種方法的問題:

  • 根本不使用setUp,而是在單獨的測試方法中初始化class。 但是,假設有 10 個測試用例; 其中 5 個需要空字符串和 rest "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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM