测试

编辑该页面

警告:你浏览的文档欧宝体育电话<一个href="//www.oldmanjams.com/releases/4.0">欧宝娱乐app下载地址Symfony 4.0,不再维护。

读<一个href="//www.oldmanjams.com/doc/current/testing.html">这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

测试< /h1>

每当你写新代码,你也可能添加新的bug。建立更好、更可靠的应用程序时,您应该使用功能和测试您的代码单元测试。

PHPUnit)测试框架< /h2>

欧宝娱乐app下载地址Symfony集成了一个独立的库<一个href="https://phpunit.de/" class="reference external" rel="external noopener noreferrer" target="_blank">PHPUnit)给你一个丰富的测试框架。本文不会讨论PHPUnit)本身,都有自己的优秀<一个href="https://phpunit.de/manual/current/en/" class="reference external" rel="external noopener noreferrer" target="_blank">欧宝体育电话

创建您的第一个测试之前,安装<一个href="//www.oldmanjams.com/components/PHPUnit%20Bridge" class="reference external">PHPUnit)桥接组件,来包装原始PHPUnit)二进制提供额外的功能:

1
美元作曲家要求- dev symfony / ph欧宝娱乐app下载地址punit-bridge

每个测试——无论它是一个单元测试或功能测试——是一个PHP类,应该生活在测试/应用程序的目录。如果你遵循这个规则,你就可以运行您的应用程序的所有测试使用下面的命令:

1
美元/ bin / phpunit)

PHPUnit)的配置phpunit.xml.distSymfony应用程序文件的根。欧宝娱乐app下载地址

提示

代码覆盖率可以与生成——覆盖- *选项,查看帮助信息显示在使用中——帮助为更多的信息。

单元测试< /h2>

单元测试是一种测试一个PHP类,也称为单位。如果你想测试您的应用程序的整体行为,看到的部分<一个href="//www.oldmanjams.com/doc/4.0/testing.html" class="reference internal">功能测试

写作Symfon欧宝娱乐app下载地址y的单元测试与写作标准PHPUnit)单元测试。例如,假设你有一个令人难以置信的简单的类称为计算器Util /应用程序包的目录:

1 2 3 4 5 6 7 8 9 10
/ / src / Util / Calculator.php名称空间应用程序\跑龙套;计算器{公共函数添加(美元一个,美元b){返回美元一个+美元b;}}

为了验证这一点,创建一个CalculatorTest文件测试/ Util您的应用程序的目录:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/ /测试/ Util / CalculatorTest.php名称空间应用程序\测试\跑龙套;使用应用程序\跑龙套\计算器;使用PHPUnit)\框架\TestCase;CalculatorTest扩展TestCase{公共函数testAdd(){美元计算器=计算器();美元结果=美元计算器- >add (30.,12);/ /正确断言计算器添加数字!美元- >assertequal (42,美元结果);}}

请注意

按照惯例,测试/目录应该复制目录为单元测试你的包。所以,如果你正在测试一个类src / Util /目录,把测试测试/ Util /目录中。

就像在真实的应用程序——半自动的是自动启用通过供应商/ autoload.php配置文件(默认情况下phpunit.xml.dist文件)。

运行测试对于一个给定的文件或目录也非常简单:

1 2 3 4 5 6 7 8
#运行所有的测试应用程序美元/ bin / phpunit)# Util /目录中运行所有测试美元/ Util / bin / phpunit)测试#为计算器类运行测试美元. / bin / / Util / CalculatorTest.php phpunit)测试

功能测试< /h2>

功能测试检查应用程序的不同层的集成(从路由视图)。他们没有不同于单元测试PHPUnit)而言,但他们有一个非常具体的工作流程:

  • 使一个请求;
  • 点击一个链接或提交表单;
  • 测试的响应;
  • 清洗和重复的方法。

创建您的第一个测试之前,安装这些包提供了一些实用程序用于功能测试:

1
美元作曲家要求- dev symfony / br欧宝娱乐app下载地址owser-kit symfony / css选择器

你的第一个功能测试< /h3>

首先,BrowserKit组件安装在您的项目:

1
美元作曲家要求- dev symfony / br欧宝娱乐app下载地址owser-kit

功能测试是简单的PHP文件,通常生活在测试/控制器目录你的包。如果你想测试页面由你处理为PostController类,通过创建一个新的开始PostControllerTest.php扩展了一个特殊的文件WebTestCase类。

作为一个例子,一个测试可以是这个样子:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ /测试/控制器/ PostControllerTest.php名称空间应用程序\测试\控制器;使用欧宝娱乐app下载地址\\FrameworkBundle\测试\WebTestCase;PostControllerTest扩展WebTestCase{公共函数testShowPost(){美元客户端=静态::createClient ();美元客户端- >请求(“得到”,' / post / hello world ');美元- >assertequal (200年,美元客户端- >getResponse ()- >getStatusCode ());}}

提示

运行功能测试,WebTestCase类需要知道哪些是应用程序内核引导它。内核中定义的类通常是KERNEL_CLASS环境变量(包含在默认phpunit.xml.distSymfony提供的文件):欧宝娱乐app下载地址

1 2 3 4 5 6 7 8
< ?xml version = " 1.0 " charset =“utf - 8”? ><phpunit)><php>< !——应用程序的值是FQCN内核- - ><env的名字=“KERNEL_CLASS”价值=“应用程序\内核”/ >< /php>< !——……- - >< /phpunit)>

如果你的用例是更复杂,你还可以覆盖createKernel ()getKernelClass ()功能测试的方法,它优先于KERNEL_CLASSenv var。

在上面的例子中,HTTP响应验证是成功的。下一步就是验证页面实际上包含预期的内容。的createClient ()方法返回一个客户,就像一个浏览器,您将使用爬行你的网站:

1
美元履带=美元客户端- >请求(“得到”,' / post / hello world ');

请求()方法(读<一个href="//www.oldmanjams.com/doc/4.0/testing.html" class="reference internal">更多关于请求方法)返回一个<一个href="https://github.com/symfony/symfony/blob/4.0/src/Symfony/Component/DomCrawler/Crawler.php" class="reference external" title="履带" rel="external noopener noreferrer" target="_blank">履带对象可用于响应中选择元素,单击链接并提交表单。

提示

履带只能当响应是一个XML或HTML文档。原始内容响应,电话客户端- > getResponse美元()- > getContent ()

爬虫的集成欧宝娱乐app下载地址symfony / css选择器CSS选择器组件的力量给你找到一个页面中的内容。安装CSS选择器组件,运行:

1
美元作曲家要求- dev symfony / cs欧宝娱乐app下载地址s选择器

现在您可以使用CSS选择器与履带。断言“Hello World”这个词是在页面上至少一次,您可以使用此断言:

1 2 3 4
美元- >assertGreaterThan (0,美元履带- >过滤器(html:包含(“Hello World”)”)- >count ());

爬虫也可以用来与页面交互。点击一个链接,首先选择它的履带使用XPath表达式或一个CSS选择器,然后使用客户端点击:

1 2 3 4 5 6 7 8
美元链接=美元履带- >过滤器(答:包含(“问候”)的)/ /查找所有与文本“问候”- >eq (1)/ /列表中选择第二个链接- >链接();/ /点击它美元履带=美元客户端- >点击(美元链接);

提交表单非常相似:选择一个表单按钮,选择覆盖一些表单值并提交相应的表单:

1 2 3 4 5 6 7 8
美元形式=美元履带- >selectButton (“提交”)- >形式();/ /设置一些值美元形式(“名字”]=“卢卡斯”;美元形式(“form_name(主题)”]=“嘿!”;/ /提交表单美元履带=美元客户端- >提交(美元形式);