我应该在单元测试中做多少对象初始化?

时间:2013-12-08 17:52:30

标签: java unit-testing junit

假设我正在测试一个方法,该方法返回我车库中的汽车数量,所以我有一个这样的方法:

public class Garage {
    public long numberOfCarsInGarage() {
        return cars.size();
    }
}

来自测试类:

@Test
public void numberOfCarsInGarage_returnsCount_whenCarsHaveBeenAddedToTheGarage() {
    Garage garage = new Garage();

    Car firstCar = new Car();
    Car secondCar = new Car();
    Car thirdCar = new Car();

    garage.addCars(firstCar, secondCar, thirdCar);

    assertEquals(3, garage.numberOfCarsInGarage());
}

每个汽车对象都有许多要设置的属性,但我不需要设置它们以便测试通过。我是对的,我应该在测试中尽可能少地执行代码以使其通过/失败?我没有在这里做任何错误,因为没有在测试中的汽车对象上设置虚拟数据?

2 个答案:

答案 0 :(得分:0)

对于您所描述的用例,似乎没有设置虚拟数据。这真的取决于项目。我正在测试一个复杂的分布式系统,每个服务器上有5个服务器和多个进程。我的一些测试处理其中的一小部分,但有些是整个系统的端到端测试。就我而言,我的大多数测试框架都是在设置环境。一般规则是你应该设置足够的,以便你的测试可能捕获失败。每当你发现你的测试用例没有捕获的东西因为它没有设置得足够多时,考虑设置更多,以便测试用例将在未来捕获它。请注意,您正在尝试平衡可能出现问题的测试用例,使其足够简单,以便您可以有效地编写它们。

答案 1 :(得分:0)

如果你是单元测试numberOfCarsInGarage(),这意味着你希望你的测试只有在该方法中的某些内容出错时才会失败,那么你应该尝试将其调用与类中的其他内容隔离开来。 / p>

我建议避免调用addCars(),而是创建一个模拟汽车列表,我set it in the SUT using reflection

相关问题