PHPUnit)大桥
编辑该页面警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.1,不再维护。
读这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。
PHPUnit)大桥
PHPUnit)大桥提供了实用程序来报告遗留测试和使用废弃的代码和一个辅助时间敏感测试。
它有以下特点:
- 力测试使用一致的语言环境(
C
); - Auto-register
class_exists
加载教义注释(使用时); - 它显示整个弃用功能列表应用程序中使用;
- 弃用按需显示堆栈跟踪;
- 提供了一个
ClockMock
对时间敏感的测试助手类。
安装
您可以安装组件在两个不同的方面:
- 安装它通过作曲家(
欧宝娱乐app下载地址symfony / phpunit-bridge
在Packagist);作为一个开发依赖; - 使用官方的Git存储库(https://github.com/欧宝娱乐app下载地址symfony/phpunit-bridge)。
然后,需要供应商/ autoload.php
文件,使作曲家提供的半自动的机制。否则,您的应用程序无法找到这个Symfony组件的类。欧宝娱乐app下载地址
使用
组件安装后,它会自动注册一个PHPUnit)事件监听器这反过来会注册一个吗PHP错误处理程序被称为DeprecationErrorHandler。运行PHPUnit)测试后,你会得到一个报告类似于这一个:
摘要包括:
- Unsilenced
- 没有推荐的报告被触发的警告注意事项@-silencing运营商。
- 遗产
- 弃用通知表示明确测试一些遗留的特性。
- 剩余的/其他
- 弃用通知所有其他(non-legacy)通知,按消息分组,测试类和方法。
触发的通知
弃用通知可以通过使用触发:
1
@trigger_error (“你的弃用信息”,E_USER_DEPRECATED);
没有@-silencing运营商从弃用通知,用户需要选择退出。沉默的违约互换这种行为时,允许用户选择他们已经准备好应付(通过添加一个自定义错误处理程序提供的桥)。不沉默时,通知将会出现Unsilenced弃用的报告。
马克测试遗留
有四个方法可以测试标记为遗产:
- (推荐)添加
@group遗留
注释的类或方法; - 使其类名开始
遗产
前缀; - 使其方法名称开始
testLegacy * ()
而不是测试* ()
; - 使其数据提供商
provideLegacy * ()
或getLegacy * ()
。
配置
以防你需要检查一个特定的堆栈跟踪弃用触发你的单元测试,您可以设置欧宝娱乐app下载地址SYMFONY_DEPRECATIONS_HELPER
环境变量正则表达式匹配这个弃用的信息,附上/
。例如,使用:
1 2 3 4 5 6 7 8 9 10 11 12
< !——http://phpunit.de/manual/4.1/en/appendixes.configuration.html——><phpunit)xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: noNamespaceSchemaLocation=“http://schema.phpunit.de/4.1/phpunit.xsd”>< !——……- - ><php><服务器的名字=“KERNEL_DIR”价值=“应用程序/”/ ><env的名字=“欧宝娱乐app下载地址SYMFONY_DEPRECATIONS_HELPER”价值=“foobar /”/ >< /php>< /phpunit)>
PHPUnit)测试套件将停止一次弃用通知触发消息包含了谁的“foobar”
字符串。
使测试失败
默认情况下,任何non-legacy-tagged或任何非“@-silenced”_弃用通知将使测试失败。另外,设置欧宝娱乐app下载地址SYMFONY_DEPRECATIONS_HELPER
一个任意值(例:320年
)将使测试失败只有达到更高数量的通知(0
是默认值)。你也可以设置值“弱”
这将使桥忽略任何的通知。这是有用的项目,必须使用弃用接口原因向后兼容性。
禁用弃用的助手
3.1
禁用弃用助手的能力是在3.1中引入的
这个组件的版本。
设置欧宝娱乐app下载地址SYMFONY_DEPRECATIONS_HELPER
环境变量来禁用
完全禁用弃用的助手。这是有用的利用该组件提供的其他功能没有得到错误或与此相关的信息。
对时间敏感的测试
用例
如果你有这种与时间相关的测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
使用欧宝娱乐app下载地址\组件\秒表\秒表;类MyTest扩展\PHPUnit_Framework_TestCase{公共函数testSomething(){美元秒表=新秒表();美元秒表- >开始();睡眠(10);美元持续时间=美元秒表- >停止();美元这- >assertequal (10,美元持续时间);}}
你使用了欧宝娱乐app下载地址Symfony秒表组件计算过程的持续时间,这10秒。然而,根据服务器的负载你的本地机器上运行的进程,美元的持续时间
例如可以“10.000023”而不是“10”。
这种测试被称为瞬态测试:他们没有根据伪随机和外部环境。他们经常使用公共持续集成服务时带来麻烦特拉维斯CI。
时钟嘲笑
的ClockMock这座桥提供的类允许您模拟PHP的内置时间函数时间()
,()
,睡眠()
和usleep ()
。
使用ClockMock
在您的测试类,您可以:
- (推荐)添加
@group时效性
注释的类或方法; - 通过调用手动注册它
ClockMock:注册(__CLASS__进行)
和ClockMock: withClockMock(真正的)
在测试前,ClockMock:: withClockMock(假)
在测试之后。
因此,以下是保证工作,不再是一个瞬态测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
使用欧宝娱乐app下载地址\组件\秒表\秒表;/ * * *@group对时间敏感的* /类MyTest扩展\PHPUnit_Framework_TestCase{公共函数testSomething(){美元秒表=新秒表();美元秒表- >开始();睡眠(10);美元持续时间=美元秒表- >停止();美元这- >assertequal (10,美元持续时间);}}
这就是一切!
提示
使用一个额外的好处ClockMock
类是时间的流逝。使用PHP的睡眠(10)
会使你的实际测试等待10秒(或多或少)。相比之下,ClockMock
类进步的内部时钟的秒数没有实际等待时间,因此您的测试将执行10秒更快。
DNS-sensitive测试
3.1
介绍了DNS相关功能的模拟该组件的3.1版本。
测试网络连接,例如检查DNS记录的有效性,可以执行缓慢和不可靠网络的条件。出于这个原因,该组件还提供了模拟这些PHP函数:
- checkdnsrr
- dns_check_record
- getmxrr
- dns_get_mx
- gethostbyaddr
- gethostbyname
- gethostbynamel
- dns_get_record
用例
考虑下面的示例,它使用checkMX
选择的电子邮件
测试电子邮件域的有效性约束:
1 2 3 4 5 6 7 8 9 10 11 12 13
使用欧宝娱乐app下载地址\组件\验证器\约束\电子邮件;类MyTest扩展\PHPUnit_Framework_TestCase{公共函数testEmail(){美元验证器=……美元约束=新电子邮件(数组(“checkMX”= >真正的));美元结果=美元验证器- >validate (“foo@example.com”,美元约束);/ /……}
为了避免使一个真正的网络连接,添加@dns-sensitive
注释的类,并使用DnsMock: withMockedHosts ()
配置数据能够得到给定主机:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
使用欧宝娱乐app下载地址\组件\验证器\约束\电子邮件;/ * * *@groupdns-sensitive * /类MyTest扩展\PHPUnit_Framework_TestCase{公共函数testEmails(){DnsMock::withMockedHosts (数组(“example.com”= >数组(数组(“类型”= >“MX”))));美元验证器=……美元约束=新电子邮件(数组(“checkMX”= >真正的));美元结果=美元验证器- >validate (“foo@example.com”,美元约束);/ /……}
的withMockedHosts ()
方法配置被定义为一个数组。键是嘲笑主机和DNS记录的值是数组返回相同的格式dns_get_record,所以你可以模拟不同网络条件:
1 2 3 4 5 6 7 8 9 10 11 12
DnsMock::withMockedHosts (数组(“example.com”= >数组(数组(“类型”= >“一个”,“知识产权”= >“为1.2.3.4”),数组(“类型”= >“AAAA”,“ipv6”= >“::12”))));
故障排除
的@group时效性
和@group dns-sensitive
注释工作“按照惯例”和假设测试类的名称空间可以获得的测试\
部分的测试名称空间。例如,如果您的测试用例完全限定类名(FQCN)应用\ \看\ DummyWatchTest测试
,它假定测试类的名称空间App \看
。
如果本公约不工作为您的应用程序,配置的嘲笑名称空间phpunit.xml
文件,例如在完成HttpKernel组件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
< !——http://phpunit.de/manual/4.1/en/appendixes.configuration.html——><phpunit)xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: noNamespaceSchemaLocation=“http://schema.phpunit.de/4.1/phpunit.xsd”>< !——……- - ><听众><侦听器类=“欧宝娱乐app下载地址Symfony \ \ PhpUnit) \ SymfonyTestsListener桥”><参数><数组><元素关键=“时效性”><字符串>欧宝娱乐app下载地址Symfony \ \ HttpFoundation组件< /字符串>< /元素>< /数组>< /参数>< /侦听器>< /听众>< /phpunit)>