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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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_Symfony - Fatal编程技术网

Unit testing 我应该测试什么?

Unit testing 我应该测试什么?,unit-testing,symfony,Unit Testing,Symfony,因此,我开始在symfony2中为我的应用程序编写功能测试和单元测试。我应该测试什么 我将功能测试与单元测试分开。功能测试仅针对控制器,单元测试针对其余部分。通过功能测试,我测试了应用程序中用户可以经历的所有场景的HTML输出。但这足够了吗?我只测试响应/请求,而不是控制器中的代码本身,没有数据库查询等 还有单元测试…我应该用它来测试控制器吗?另外,测试存储库怎么样?我应该测试每个查询的输出吗?如果数据库缺少这些记录呢 另外,测试在数据库中创建的混乱情况如何?有没有办法在测试后将数据库恢复到以前

因此,我开始在symfony2中为我的应用程序编写功能测试和单元测试。我应该测试什么

我将功能测试与单元测试分开。功能测试仅针对控制器,单元测试针对其余部分。通过功能测试,我测试了应用程序中用户可以经历的所有场景的HTML输出。但这足够了吗?我只测试响应/请求,而不是控制器中的代码本身,没有数据库查询等

还有单元测试…我应该用它来测试控制器吗?另外,测试存储库怎么样?我应该测试每个查询的输出吗?如果数据库缺少这些记录呢

另外,测试在数据库中创建的混乱情况如何?有没有办法在测试后将数据库恢复到以前的状态

很抱歉有这么多问题,但这整个单元测试科目现在对我来说真是一团糟


非常感谢

让我们将这两种测试分开:单元测试和功能测试

单元测试

这些测试应该测试程序中最小的单元:函数(在SF2的类中)。单元测试应该很快,这样它们就可以在不使用数据库或呈现任何内容的情况下测试您的业务逻辑

您可以通过在依赖项注入类中模拟服务来实现这一点

功能测试

大多数web应用程序都是从前端而不是后端构建的。我的意思是它有大树枝模板和几行控制器和数据库查询。无法使用单元测试对其进行测试,但需要确保某些元素显示在浏览器中

此外,您还需要测试一组功能。使用功能测试,您可以模拟手动测试的几个步骤。例如,加载登录页面,然后填写输入,提交表单,然后您可以检查响应消息和身份验证状态

但是功能测试确实很昂贵。加载一个页面可能需要几秒钟,这意味着一个中型项目中的一整套功能测试可能需要几个小时!因此,您不能同时使用TDD()和功能测试

结论

  • 单元测试+业务逻辑可以在TDD中使用,但您不能完全测试整个系统和输出。但它只能用于测试业务逻辑
  • 功能测试+数据装置可用于系统测试,确保元素出现在呈现的页面上,并测试完整的流程,但速度非常慢
另外,测试存储库怎么样?我应该测试每个查询的输出吗?如果数据库缺少这些记录呢

我不知道这对你是否有用,但你可以

如果数据库缺少这些记录呢

另外,测试在数据库中创建的混乱情况如何?有没有办法在测试后将数据库恢复到以前的状态

你可以:

app/config/config_test.yml

Symfony2还具有,这是一种自动填充数据库的方法


注意:所有链接都指向Symfony2官方文档。

如果在
dev
test
环境中加载页面需要几秒钟,请尝试将缓存移动到或移动到a,您应该会发现明显的差异。我不明白为什么TDD和功能测试不兼容。您可以配置phpunit,以便一次只测试一个组、类等。因此,如果您正确配置phpunit TDD,将不会花费更多时间。为了使用功能测试,您必须在每次运行一组测试时擦除数据库。这需要时间。另一个问题就是执行的测试的数量。您并没有执行所有这些代码,这意味着在重构某些代码之后,您无法确保一切正常,只是其中的一部分。使用单元测试,您希望检查整个代码是否存在错误,因为如果没有单元测试,您无法确保不会通过重构某些内容来破坏某些代码。您可以在处理代码时将phpunit限制为一个或两个测试,然后在部署代码之前测试整个应用程序。这是事实,但在这种情况下,您可以提交破坏系统的内容,并在部署当天面对它。你应该交付你的产品,但你不能这样做,因为它是坏的。所以您的测试不是用真正的TDD编写的(因为它在开发过程中可能会中断),它们只是测试。
doctrine:
    # ...
    dbal:
        host:     localhost
        dbname:   testdb
        user:     testdb
        password: testdb