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
Unit testing 基本单元测试_Unit Testing_Tdd - Fatal编程技术网

Unit testing 基本单元测试

Unit testing 基本单元测试,unit-testing,tdd,Unit Testing,Tdd,为这样简单的代码编写单元测试是否值得: public class TableController { private TableView view; public TableController(TableView view) { this.view = view; } public void onShowTable() { view.showTable(); } } 我在我的项目中有很多这样非常简单的代码,它们连接控制器、视图、服务、远程服务等。单元测

为这样简单的代码编写单元测试是否值得:

public class TableController {
  private TableView view;

  public TableController(TableView view) {
    this.view = view;
  }

  public void onShowTable() {
    view.showTable();
  }
}
我在我的项目中有很多这样非常简单的代码,它们连接控制器、视图、服务、远程服务等。单元测试只是重复所有内容,通常比代码本身更大:

public class TableControllerTest {
  @Test
  public void showTable() {
    TableView view = createMock(TableView.class);
    view.showTable();

    replayAll();

    TableController controller = new TableController(view);
    controller.onShowTable();

    verifyAll();
  }
}
真的需要这样的测试吗


谢谢

不同的人会有不同的意见。你肯定需要测试所有可能出错的东西。这对你意味着什么取决于你自己。过多的测试会降低生产率,正如过少的测试会遗漏问题一样。您需要确定什么对您有效。

当您更改方法的实现并需要确保它仍然有效时,需要使用它们。 当它发生在2年后的时候,想记住这个方法是如何编写单元测试的就太晚了——你应该现在就做


当您将它们与更复杂的方法/逻辑上的测试进行比较时,它们不太需要,但仍然需要。

测试总是一件好事,尤其是当您希望代码随着时间的推移而增长时。在重构或对代码库进行重大更改后,能够检查旧功能是否仍能正常工作是非常有用的


但是,在您的特定情况下,我认为这些代码位的功能太小,无法从测试中受益,而使用
showTable
等的测试将更有用。

不。您不必对所有内容进行单元测试。另一方面,您可能希望尝试反转流程,先编写测试,然后编写代码。在许多情况下,您会发现如果您先编写测试,您最终会编写不同的代码,您认为您会从编写测试时的结果而不是我应该编写什么代码的角度来考虑。当以这种方式编写测试时,您会发现测试比简单地使用它们来执行代码更有价值。一旦掌握了窍门,您还将了解何时需要测试,何时不需要--例如,自动属性访问器不需要进行单元测试


如果你已经先做了测试,那么我不确定我是否理解这个问题,因为你的测试不能重复尚未编写的内容。您已经使用测试来定义这些方法应该做什么。这是一项非常有用的活动,并且在其他测试导致破坏性变化的情况下具有保护作用。在单元测试中找到它比在实际应用程序中找到要好得多。

我不会测试简单的委托方法

有句好话(尽管我记不起是谁发的): “不要测试太简单而无法破坏的东西…”

我的项目中连接控制器、视图、服务、远程服务等的代码


对于这类事情,单元测试可能没有用处,但集成测试是有用的,即检查应用程序作为一个整体的功能(可能基于用例)是否具有最少的模拟的测试。这些测试需要更长的时间,并且不能在所有的边缘情况下运行,但是它们在揭示组件交互方式中的问题方面非常有价值,而且在这种粘合代码中也非常有用。

对于这样的模块,实实在在不需要进行测试。然而,为这样的模块编写测试并不困难。所以写测试真的没有坏处。您还必须记住,所展示的简单模块往往会随着时间的推移而增长。如果您没有对模块进行测试,那么当向模块添加新的逻辑位时,您可能会认为旧模块和新逻辑之间的增量太简单,无法进行测试。模块一点一点地增长,无需测试


最后,我将为简单的模块编写测试,因为它们编写起来很简单,当模块变得更复杂时,它们充当占位符

你可能想看看:你怎么知道什么太简单而不能打破?真正的标准不是测试语言特性或外部库;e、 g.您不需要测试
var=5
为该变量赋值5(语言保证),但您需要测试代码可能因该赋值而产生的任何副作用。