簡體   English   中英

JUnit測試中的“ Singleton”

[英]“Singleton” on JUnit test

我已經使用兩年了,現在我正在嘗試學習TDD(測試驅動開發)和JUnit, FizzBu​​zz Kata似乎是一個不錯的起點。 所以我做到了:

public class FizzBuzz {
    public static void main(String[] args) {
        Generator generator = new Generator();
        List<String> numbers = generator.fill(1, 100);
        numbers.forEach( item -> System.out.println(item) );
    }
}

現在可以找到它了,關於我的GeneratorTest.java有一個問題:

public class GeneratorTest {
@Test
public void checkFizz() {
    //Arrange
    Generator generator = new Generator(); // This line is on every test!

    //Act
    final int fizzNumber = 3;
    final int containsFizz = 13;

    final String result1 = generator.transform(fizzNumber);
    final String result2 = generator.transform(containsFizz);

    // Assert
    assertEquals("Fizz", result1);
    assertEquals("Fizz", result2);
}

@Test
public void checkBuzz() {
    //Arrange
    Generator generator = new Generator(); // This line is on every test!

    //Act
    final int buzzNumber = 5;
    final int containsBuzz = 52;

    final String result1 = generator.transform(buzzNumber);
    final String result2 = generator.transform(containsBuzz);

    // Assert
    assertEquals("Buzz", result1);
    assertEquals("Buzz", result2);
}

@Test
public void checkFizzBuzz() {
    //Arrange
    Generator generator = new Generator(); // This line is on every test!

    //Act
    final int fizzBuzzNumber = 15;
    final int containsFizzBuzz = 53;

    final String result1 = generator.transform(fizzBuzzNumber);
    final String result2 = generator.transform(containsFizzBuzz);

    // Assert
    assertEquals("FizzBuzz", result1);
    assertEquals("FizzBuzz", result2);
}

@Test
public void checkFillSize() {
    //Arrange
    Generator generator = new Generator(); // This line is on every test!

    //Act
    final int lowerBound = 2;
    final int upperBound = 100;
    final int expectedSize = upperBound - lowerBound + 1;
    List<String> filledList = generator.fill(lowerBound, upperBound);

    //Assert
    assertEquals(expectedSize, filledList.size() );
}

@Test
public void checkFillContents() {
    //Arrange
    Generator generator = new Generator(); // This line is on every test!

    //Act
    ArrayList<String> expectedList = new ArrayList<>( Arrays.asList("1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "Fizz", "14", "FizzBuzz", "16", "17", "Fizz", "19", "Buzz", "Fizz", "22", "Fizz", "Fizz", "Buzz", "26", "Fizz", "28", "29", "FizzBuzz") ) ;
    List<String> filledList = generator.fill(1, expectedList.size() );

    //Assert
    assertEquals(expectedList, filledList);
}

@Test
public void checkFillCrossedBounds() {
    //Arrange
    Generator generator = new Generator(); // This line is on every test!

    //Act
    final int lowerBound = 100;
    final int upperBound = 1;
    final int expectedSize = 0;
    List<String> filledList = generator.fill(lowerBound, upperBound);

    //Assert
    assertEquals(expectedSize, filledList.size() );
}

有沒有辦法制作單例generator 如果是這樣,這是一個好習慣嗎?

我曾考慮過在構造函數中執行此操作,但是我不確定這是否是“正確”的方法,因為我對JUnit和TDD相當陌生。

PS:來自西班牙的問候!

我同意JB Nizet的觀點,每個測試彼此獨立。

因此,您的類Generator一定不能是單例。
我不太了解Java,但是在每個測試運行器中,您都可以使用以下方法:

  • 之前
  • 事后
  • 事前
  • 畢竟

例如,您的行Generator generator = new Generator(); 可 :

public class GeneratorTest {
    private Generator generator = null

    @Before
    public void runBeforeEachMethod() {
       this.generator = new Generator();
    }

    // your tests
}

因此,對於每個測試,您都有一個Generator的新實例。 您也可以使用BeforeAll ,但是更改生成器的狀態可能會導致一些不良的副作用,從而使測試失敗。

您可以查看以下文檔: https : //www.mkyong.com/unittest/junit-4-tutorial-1-basic-usage/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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