【发布时间】:2017-09-20 18:49:26
【问题描述】:
我已经使用 have 两年了,现在我正在尝试学习 TDD(测试驱动开发)和 JUnit,FizzBuzz 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:来自西班牙的问候!
【问题讨论】:
-
为什么要单身?它似乎是一个完全无状态的对象。每次你需要一个时创建它是非常好的。你当然可以避免在每个测试方法中创建它,方法是在构造函数中创建它,或者在
@Before-annotated 方法中创建它。 -
好吧,“单例”就是我使用的名称。也许不适合这种情况,你是对的,是一个无状态的对象。我不喜欢的是重复的代码。
-
然后使用设置方法。这就是他们的目的。