Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在进行单元测试时,仅实例化其他域对象就足够了吗?_Java_Unit Testing - Fatal编程技术网

Java 在进行单元测试时,仅实例化其他域对象就足够了吗?

Java 在进行单元测试时,仅实例化其他域对象就足够了吗?,java,unit-testing,Java,Unit Testing,如果您测试类Car,并希望在其上创建一个返回座位数的方法。如果不需要,只需多次写入car.addSeat(new Seat())而不在座椅上实际设置一些数据就足够了吗?该方法类似于: public int numberOfSeats() { return seats.size(); } 鉴于此,座位是一个座位列表。或者,即使不需要,您也会在座椅上填写数据吗?你是否应该尽可能地努力把测试写得最少? < P>你应该考虑使用嘲弄。通过模拟,您可以使用预期控制未被测试的对象的行为 e、 g。

如果您测试类Car,并希望在其上创建一个返回座位数的方法。如果不需要,只需多次写入
car.addSeat(new Seat())
而不在座椅上实际设置一些数据就足够了吗?该方法类似于:

public int numberOfSeats() {
    return seats.size();
}

鉴于此,座位是一个座位列表。或者,即使不需要,您也会在座椅上填写数据吗?你是否应该尽可能地努力把测试写得最少?

< P>你应该考虑使用嘲弄。通过模拟,您可以使用预期控制未被测试的对象的行为

e、 g。 当(seat.getSomeProperty())。然后返回(“某个值”)

但是如果你不需要这个值,你可以把期望从你的代码中去掉。这样,代码就可以在不重写测试的情况下更新,并且维护测试就简单多了

结帐莫基托

我想到两种方法

  • 准确地定义您想要测试的内容,您将准确地知道需要填写哪些数据。在你的例子中,没有必要填满座位

  • 如果您想要测试的不仅仅是numberOfSeats,您可以使用setUp和tearDown为每个测试创建一组可重用的数据。JUnit在每次测试之前运行安装程序,在测试之后运行拆卸


  • 1) 所以你也对域类使用模拟?2) 像这样模仿比像我一样创建空对象好吗?是的,这更好,因为你可以完全控制对象。下面是来自真实世界示例的一个场景。我创建了具有两个属性的非常薄的域对象。有人决定其中一个属性是必需的,并将该属性添加到构造函数中。在测试中,我不想通过该属性,所以我只创建了一个带有ObjA a=mock(ObjA.class)的mock,并可以创建我想要的任何行为。mock允许您清楚地定义测试中的内容以及依赖项。