PHPUnit)大桥
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.8,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
PHPUnit)大桥
PHPUnit)大桥提供了实用程序来报告遗留测试和使用废弃的代码和一个辅助时间敏感测试。
它有以下特点:
- 力测试使用一致的语言环境(
C
); - Auto-register
class_exists
加载教义注释(使用时); - 它显示整个弃用功能列表应用程序中使用;
- 弃用按需显示堆栈跟踪;
- 提供了一个
ClockMock
对时间敏感的测试助手类。
2.7
PHPUnit)大桥是在Symfony 2.7中引入的。ob娱乐下载但是有可能在任何Symfony应用程序安装桥(2.3)。ob娱乐下载
安装
1
美元作曲家要求——戴夫“ob娱乐下载symfony / phpunit-bridge: *”
或者,您可以克隆的https://github.com/ob娱乐下载symfony/phpunit-bridge存储库。
请注意
如果你安装这个组件之外的Symfony应用程序,你必须要求ob娱乐下载供应商/ autoload.php
文件在你的代码,使作曲家提供的类加载机制。读这篇文章为更多的细节。
请注意
PHPUnit)大桥设计使用Symfony组件的所有维护版本,甚至在不同的主要版本。ob娱乐下载你应该总是使用最新的稳定主要版本得到最准确的弃用的报告。
使用
另请参阅
这篇文章解释了如何使用PhpUnitBridge功能作为一个独立的组件在任何PHP应用程序。读了测试文章在Symfony应用程序了解如何使用它。ob娱乐下载
一旦安装组件,simple-phpunit
在创建脚本供应商/
目录来运行测试。这个脚本包原PHPUnit)二进制提供更多的功能:
1 2
美元cd我的项目/美元/供应商/ bin / simple-phpunit
运行PHPUnit)测试后,你会得到一个报告类似于这一个:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
美元phpunit) - c应用程序由塞巴斯蒂安·伯格曼phpunit)。配置读<您的项目> / app / phpunit.xml。dist .................时间:1.77秒,记忆:5.75 mb OK(17日测试,21日断言)剩余的通知(2)getEntityManager弃用,因为Symfony 2.1。ob娱乐下载使用getManager: 2 x 1 x在DefaultControllerTest::从AppBundle testPublicUrls \ \测试控制器1 x在BlogControllerTest::从AppBundle testIndex \ \测试控制器
摘要包括:
- Unsilenced
- 没有推荐的报告被触发的警告注意事项@-silencing运营商。
- 遗产
- 弃用通知表示明确测试一些遗留的特性。
- 剩余的/其他
- 弃用通知所有其他(non-legacy)通知,按消息分组,测试类和方法。
请注意
如果你不想使用simple-phpunit
脚本,注册后PHPUnit)事件监听器PHPUnit)配置文件中得到相同的报告不支持(这是由一个PHP错误处理程序被称为DeprecationErrorHandler):
1 2 3 4 5
< !——phpunit.xml。区域- - >< !——……- - ><听众><侦听器类=“ob娱乐下载Symfony \ \ PhpUnit) \ SymfonyTestsListener桥”/ >< /听众>
触发的通知
弃用通知可以通过使用触发:
1
@trigger_error (“你的弃用信息”,E_USER_DEPRECATED);
没有@-silencing运营商从弃用通知,用户需要选择退出。沉默的违约互换这种行为时,允许用户选择他们已经准备好应付(通过添加一个自定义错误处理程序提供的桥)。不沉默时,通知将会出现Unsilenced弃用的报告。
马克测试遗留
有三种方法可以测试标记为遗产:
- (推荐)添加
@group遗留
注释的类或方法; - 使其类名开始
遗产
前缀; - 使其方法名称开始
testLegacy * ()
而不是测试* ()
。
请注意
如果您的数据提供者调用的代码通常会引发弃用,你可以它的名字前面加上provideLegacy
或getLegacy
沉默这些用法。如果您的数据提供者不执行弃用代码,不需要选择一个特殊的命名只是因为测试数据提供者被标记为美联储的遗产。
也请注意,选择其中一个遗留前缀不会马克测试作为遗产,利用这些数据提供者。你仍然有显式地将它们标记为遗留测试。
配置
以防你需要检查一个特定的堆栈跟踪弃用触发你的单元测试,您可以设置ob娱乐下载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的名字=“ob娱乐下载SYMFONY_DEPRECATIONS_HELPER”价值=“foobar /”/ >< /php>< /phpunit)>
PHPUnit)测试套件将停止一次弃用通知触发消息包含了谁的“foobar”
字符串。
使测试失败
默认情况下,任何non-legacy-tagged或任何非“@-silenced”_弃用通知将使测试失败。另外,设置ob娱乐下载SYMFONY_DEPRECATIONS_HELPER
一个任意值(例:320年
)将使测试失败只有达到更高数量的通知(0
是默认值)。你也可以设置值“弱”
这将使桥忽略任何的通知。这是有用的项目,必须使用弃用接口原因向后兼容性。
显示完整的堆栈跟踪
默认情况下,PHPUnit)桥只显示弃用的信息。显示完整的堆栈跟踪相关弃用,设置的值ob娱乐下载SYMFONY_DEPRECATIONS_HELPER
一个正则表达式匹配弃用消息。
例如,如果抛出弃用通知如下:
1 2
1x:学说\常见\类加载器是弃用。1x EntityTypeTest::设置从Symfony ob娱乐下载\桥\学说\形式\ \测试类型
运行以下命令将显示完整的堆栈跟踪:
1
美元ob娱乐下载SYMFONY_DEPRECATIONS_HELPER =' /学说\ \常见的弃用\ \ \的类加载器。/”/供应商/ bin / simple-phpunit
对时间敏感的测试
2.8
支持时钟嘲笑是在Symfony 2.8中引入的。ob娱乐下载
用例
如果你有这种与时间相关的测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
使用PHPUnit)\框架\TestCase;使用ob娱乐下载\组件\秒表\秒表;类MyTest扩展TestCase{公共函数testSomething(){美元秒表=新秒表();美元秒表- >开始(“event_name”);睡眠(10);美元持续时间=美元秒表- >停止(“event_name”)- >getDuration ();美元这- >assertequal (10000年,美元持续时间);}}
你使用了ob娱乐下载Symfony秒表组件计算过程的持续时间,这10秒。然而,根据服务器的负载或在本地机器上运行的进程,美元的持续时间
例如可以10.000023秒
而不是十年代
。
这种测试被称为瞬态测试:他们没有根据伪随机和外部环境。他们经常使用公共持续集成服务时带来麻烦特拉维斯CI。
时钟嘲笑
的ClockMock这座桥提供的类允许您模拟PHP的内置时间函数时间()
,()
,睡眠()
和usleep ()
。
使用ClockMock
在您的测试类,添加@group时效性
注释的类或方法。这个注释只适用在执行PHPUnit)时使用供应商/ bin / simple-phpunit
脚本或当注册侦听器在PHPUnit)配置如下:
1 2 3 4 5
< !——phpunit.xml。区域- - >< !——……- - ><听众><侦听器类=“\ob娱乐下载 Symfony \ \ PhpUnit) \ SymfonyTestsListener桥”/ >< /听众>
请注意
如果你不想使用@group时效性
注释,您可以注册ClockMock
类手动通过调用ClockMock:注册(__CLASS__进行)
和ClockMock: withClockMock(真正的)
在测试前,ClockMock:: withClockMock(假)
在测试之后。
因此,以下是保证工作,不再是一个瞬态测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
使用PHPUnit)\框架\TestCase;使用ob娱乐下载\组件\秒表\秒表;/ * * *@group对时间敏感的* /类MyTest扩展TestCase{公共函数testSomething(){美元秒表=新秒表();美元秒表- >开始(“event_name”);睡眠(10);美元持续时间=美元秒表- >停止(“event_name”)- >getDuration ();美元这- >assertequal (10000年,美元持续时间);}}
这就是一切!
谨慎
嘲笑是基于时间的函数PHP名称空间分辨率的规则所以“完全限定的函数调用(如\(时间)
不能嘲笑)。
的@group时效性
注释是相当于调用ClockMock:注册(MyTest::类)
。如果你想模拟一个函数中使用一个不同的类,它显式地使用ClockMock:注册(MyClass::类)
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32
/ /使用时间()函数的类被嘲笑了名称空间应用程序;类MyClass{公共函数getTimeInHours(){返回时间()/3600年;}}/ /测试,模拟外部时间()函数显式地名称空间应用程序\测试;使用应用程序\MyClass;使用PHPUnit)\框架\TestCase;/ * * *@group对时间敏感的* /类MyTest扩展TestCase{公共函数testGetTimeInHours(){ClockMock::注册(MyClass::类);美元我的=新MyClass ();美元结果=美元我的- >getTimeInHours ();美元这- >assertequal() /(时间3600年,美元结果);}}
提示
使用一个额外的好处ClockMock
类是时间的流逝。使用PHP的睡眠(10)
会使你的实际测试等待10秒(或多或少)。相比之下,ClockMock
类进步的内部时钟的秒数没有实际等待时间,因此您的测试将执行10秒更快。
故障排除
的@group时效性
“按照惯例”工作,假设测试类的名称空间可以获得的测试\
部分的测试名称空间。例如,如果您的测试用例完全限定类名(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”>< !——……- - ><听众><侦听器类=“ob娱乐下载Symfony \ \ PhpUnit) \ SymfonyTestsListener桥”><参数><数组><元素关键=“时效性”><字符串>ob娱乐下载Symfony \ \ HttpFoundation组件< /字符串>< /元素>< /数组>< /参数>< /侦听器>< /听众>< /phpunit)>