PHPUnit)大桥
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.2,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
PHPUnit)大桥
PHPUnit)大桥提供了实用程序来报告遗留测试和使用废弃的代码和助手嘲笑本机函数相关,DNS和阶级存在。
它有以下特点:
- 力测试使用一致的语言环境(
C
)(如果你创建语言环境敏感的测试,用PHPUnit)setLocale ()
方法); - Auto-register
class_exists
加载教义注释(使用时); - 它显示整个弃用功能列表应用程序中使用;
- 弃用按需显示堆栈跟踪;
- 提供了一个
ClockMock
,DnsMock
和ClassExistsMock
类测试敏感时间,网络或类的存在; - 提供了一个PHPUnit),允许1的修改版本。分离应用程序的依赖项的phpunit),以防止任何不必要的约束应用;2。并行运行测试的测试套件时分裂成几个phpunit)。xml文件;3所示。记录和重放跳过测试;
- 它允许创建测试兼容多个PHPUnit)版本(因为它提供polyfills失踪的方法,为没有名称空间的名称空间别名类,等等)。
安装
1
美元作曲家要求- dev symfony / phob娱乐下载punit-bridge
请注意
如果你安装这个组件之外的Symfony应用程序,你必须要求ob娱乐下载供应商/ autoload.php
文件在你的代码,使作曲家提供的类加载机制。读这篇文章为更多的细节。
请注意
PHPUnit)大桥设计使用Symfony组件的所有维护版本,甚至在不同的主要版本。ob娱乐下载你应该总是使用最新的稳定主要版本得到最准确的弃用的报告。
如果你计划PHPUnit)大桥和使用常规PHPUnit)脚本(不是Symfony提供的修改后的PHPUnit)脚本),你必须注册一个新的ob娱乐下载测试监听器被称为ob娱乐下载SymfonyTestsListener
:
1 2 3 4 5 6 7 8 9 10 11
< !——http://phpunit.de/manual/6.0/en/appendixes.configuration.html——><phpunit)xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: noNamespaceSchemaLocation=“https://schema.phpunit.de/6.0/phpunit.xsd”>< !——……- - ><听众><侦听器类=“ob娱乐下载Symfony \ \ PhpUnit) \ SymfonyTestsListener桥”/ >< /听众>< /phpunit)>
使用
另请参阅
这篇文章解释了如何使用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
美元。/供应商/ bin / simple-phpunit塞巴斯蒂安·伯格曼PHPUnit)。配置读<您的项目> / phpunit.xml。dist .................时间:1.77秒,记忆:5.75 mb OK(17日测试,21日断言)剩余的通知(2)getEntityManager弃用,因为Symfony 2.1。ob娱乐下载使用getManager: 2 x 1 x在DefaultControllerTest: testPublicUrls从应用\ \测试控制器1 x在BlogControllerTest: testIndex从应用\ \测试控制器
摘要包括:
- Unsilenced
- 没有推荐的报告被触发的警告注意事项@-silencing运营商。
- 遗产
- 弃用通知表示明确测试一些遗留的特性。
- 剩余的/其他
- 弃用通知所有其他(non-legacy)通知,按消息分组,测试类和方法。
请注意
如果你不想使用simple-phpunit
脚本,注册后PHPUnit)事件监听器PHPUnit)配置文件中得到相同的报告不支持(这是由一个PHP错误处理程序被称为DeprecationErrorHandler):
1 2 3 4 5
< !——phpunit.xml。区域- - >< !——……- - ><听众><侦听器类=“ob娱乐下载Symfony \ \ PhpUnit) \ SymfonyTestsListener桥”/ >< /听众>
并行运行测试
修改后的PHPUnit)脚本允许并行运行测试通过提供一个与自己的目录中包含多个测试套件phpunit.xml.dist
。
1 2 3 4 5 6 7
├──测试/│├──功能/││├──……││└──phpunit.xml.dist│ ├── Unit/ │ │ ├── ... │ │ └── phpunit.xml.dist< /code>
1
美元/ /供应商/ bin / simple-phpunit测试
修改后的PHPUnit)脚本将提供目录递归地穿过,深度3子目录或指定的环境变量的值ob娱乐下载SYMFONY_PHPUNIT_MAX_DEPTH
,寻找phpunit.xml.dist
文件,然后运行并行每个套件它发现,收集他们的输出和显示每个测试套件的结果在自己的部分。
触发的通知
弃用可以通过使用触发通知trigger_deprecation
从ob娱乐下载symfony / deprecation-contracts
包:
1 2 3 4 5
/ /显示是1.3版本的商家名称/ packagename以来弃用trigger_deprecation (“商家名称/包名称”,“1.3”,“你的弃用信息”);/ /还可以使用printf格式(所有参数后,消息将使用)trigger_deprecation (“……”,“1.3”,“价值“% s”弃用,使用…相反。”,美元价值);
马克测试遗留
有三种方法可以测试标记为遗产:
- (推荐)添加
@group遗留
注释的类或方法; - 使其类名开始
遗产
前缀; - 使其方法名称开始
testLegacy * ()
而不是测试* ()
。
请注意
如果您的数据提供者调用的代码通常会引发弃用,你可以它的名字前面加上provideLegacy
或getLegacy
沉默这些用法。如果您的数据提供者不执行弃用代码,不需要选择一个特殊的命名只是因为测试数据提供者被标记为美联储的遗产。
也请注意,选择其中一个遗留前缀不会马克测试作为遗产,利用这些数据提供者。你仍然有显式地将它们标记为遗留测试。
配置
以防你需要检查一个特定的堆栈跟踪弃用触发你的单元测试,您可以设置ob娱乐下载SYMFONY_DEPRECATIONS_HELPER
环境变量正则表达式匹配这个弃用的信息,附上/
。例如,使用:
1 2 3 4 5 6 7 8 9 10 11 12
< !——http://phpunit.de/manual/6.0/en/appendixes.configuration.html——><phpunit)xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: noNamespaceSchemaLocation=“https://schema.phpunit.de/6.0/phpunit.xsd”>< !——……- - ><php><服务器的名字=“KERNEL_CLASS”价值=“应用程序\内核”/ ><env的名字=“ob娱乐下载SYMFONY_DEPRECATIONS_HELPER”价值=“foobar /”/ >< /php>< /phpunit)>
PHPUnit)测试套件将停止一次弃用通知触发消息包含了谁的“foobar”
字符串。
使测试失败
默认情况下,任何non-legacy-tagged或任何非@-silenced < @-silencing操作符> ' _弃用通知将使测试失败。或者,您可以配置一个任意的阈值设置ob娱乐下载SYMFONY_DEPRECATIONS_HELPER
来马克斯(总)= 320
例如。它将使测试失败只有达到更高数量的通知(0
是默认值)。
你甚至可以使用的其他键更细粒度的控制马克斯
数组,自我
,直接
,间接
。的ob娱乐下载SYMFONY_DEPRECATIONS_HELPER
环境变量接受一个url编码的字符串,这意味着你可以结合阈值和任何其他配置设置,如下:ob娱乐下载SYMFONY_DEPRECATIONS_HELPER = '马克斯(总)= 42马克斯(自我)= 0 verbose = 0 '
内部的用法
当你保持一个图书馆,在测试套件失败一旦依赖引入了一个新的弃用不可取,因为它变化的负担修理,弃用任何贡献者提交拉请求一个新的供应商发布后不久,弃用。
减轻,可以使用更严格的要求,希望依赖不会介绍不支持在一个补丁版本,甚至提交composer.lock
文件,这将创建另一个类的问题。库通常会使用ob娱乐下载SYMFONY_DEPRECATIONS_HELPER = max(总)= 999999
因为这个。这允许贡献的缺点,不支持但介绍:
- 忘了如果有任何解决弃用打电话;
- 忘了马克与适当的测试
@group遗留
注释。
通过使用ob娱乐下载SYMFONY_DEPRECATIONS_HELPER = max(自我)= 0
外,与此同时触发供应商
目录将分别核算,而与此同时从图书馆里面不会触发(除非你达到999999),给你最好的两个世界。
直接和间接的用法
当工作在一个项目,你可能更感兴趣马克斯(直接)
。假设你想修复的用法就出现。一个问题,很多开发人员的经验是,依赖与他们往往落后于自己的依赖性,这意味着他们不尽快修复的用法,这意味着你应该创建一个拉请求过时的供应商,而忽略这些用法,直到你把请求合并。
的马克斯(直接)
配置允许您将一个阈值直接的用法,让你注意到什么时候你的代码利用废弃的api,并跟上变化。你仍然可以使用马克斯(间接)
如果你想保持间接不支持在一个给定的阈值。
这是一个总结,可以帮助您选择正确的配置:
价值 | 推荐情况 |
---|---|
马克斯(总)= 0 | 建议积极维护项目与健壮的/不依赖 |
马克斯(直接)= 0 | 推荐项目依赖项未能跟上新的用法。 |
马克斯(自我)= 0 | 推荐使用弃用的库系统自己和不能使用上面的模式之一。 |
基本的用法
如果您的应用程序有一些用法,你不能解决基于某些原因,您可以告诉Symfony忽略它们。ob娱乐下载关键是要创建一个文件允许的用法和定义它为“弃用基线”。不支持内部文件忽视但是其他不支持仍报道。
首先,生成的文件允许的用法(无论何时你想要运行相同的命令来更新现有的文件):
1
美元ob娱乐下载SYMFONY_DEPRECATIONS_HELPER =“generateBaseline = true&baselineFile = /测试/ allowed.json。”/供应商/ bin / simple-phpunit
这个命令存储所有与此报告在运行测试编码的文件路径和JSON。
然后,您可以运行下面的命令来使用文件和忽略那些不支持:
1
美元ob娱乐下载SYMFONY_DEPRECATIONS_HELPER =“baselineFile = /测试/ allowed.json。”/供应商/ bin / simple-phpunit
5.2
的baselineFile
和generateBaseline
选择在Symfony 5.2中引入的。ob娱乐下载
禁用详细输出
默认情况下,这座桥将显示详细的输出的数量随着他们出现的地方。如果这对你太多,你可以使用ob娱乐下载SYMFONY_DEPRECATIONS_HELPER = verbose = 0
把详细的输出。
它也可以改变每弃用冗长的类型。例如,使用安静的[]= indirect&quiet [] =
将隐藏细节类型不支持“间接”和“其他”。
5.1
的安静的
选项是在Symfony 5.1中引入的。ob娱乐下载
禁用弃用的助手
设置ob娱乐下载SYMFONY_DEPRECATIONS_HELPER
环境变量来禁用= 1
完全禁用弃用的助手。这是有用的利用该组件提供的其他功能没有得到错误或与此相关的信息。
弃用半自动的时候通知
默认情况下,PHPUnit)桥使用DebugClassLoader
从ErrorHandler组件扔弃用在类加载时通知。这可以被禁用debug-class-loader
选择。
1 2 3 4 5 6 7 8 9 10 11 12
< !——phpunit.xml。区域- - >< !——……- - ><听众><侦听器类=“ob娱乐下载Symfony \ \ PhpUnit) \ SymfonyTestsListener桥”><参数><数组>< !——此选项设置为0禁用DebugClassLoader集成- - ><元素关键=“debug-class-loader”><整数>0< /整数>< /元素>< /数组>< /参数>< /侦听器>< /听众>
写断言的用法
当添加不支持你的代码,你可能喜欢编写测试,验证他们根据需要触发。为此,提供的桥梁expectDeprecation ()
方法,您可以使用在你的测试方法。它需要你通过预期的消息,在相同的格式PHPUnit)的assertStringMatchesFormat ()方法。如果你期望不止一个弃用信息对于一个给定的测试方法,您可以使用该方法多次(顺序问题):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日
使用PHPUnit)\框架\TestCase;使用ob娱乐下载\桥\PhpUnit)\ExpectDeprecationTrait;类MyTest扩展TestCase{使用ExpectDeprecationTrait;/ * * *@group遗留* /公共函数testDeprecatedCode(){/ /测试代码触发以下弃用:/ / trigger_deprecation(“商家名称/包名称”,“5.1”,“这“Foo”方法是不赞成的。”);美元这- >expectDeprecation (“既然商家名称/包名5.1:这“% s”方法是过时的);/ /……/ /测试代码触发以下弃用:/ / trigger_deprecation(“商家名称/包名称”,“4.4”,“酒吧”的第二个参数方法是弃用。”);美元这- >expectDeprecation (“既然商家名称/ 4.4包名:“% s”方法的第二个参数是弃用。);}}
5.1
ob娱乐下载Symfony版本5.1还包括之前@expectedDeprecation
注释要测试的用法,但这是弃用的方法。
显示完整的堆栈跟踪
默认情况下,PHPUnit)桥只显示弃用的信息。显示完整的堆栈跟踪相关弃用,设置的值ob娱乐下载SYMFONY_DEPRECATIONS_HELPER
一个正则表达式匹配弃用消息。
例如,如果抛出弃用通知如下:
1 2
1 x:学说\常见\类加载器是弃用。1 x在EntityTypeTest:安装Symfony \桥ob娱乐下载\学说\测试\ \类型形式
运行以下命令将显示完整的堆栈跟踪:
1
美元ob娱乐下载SYMFONY_DEPRECATIONS_HELPER =' /学说\ \常见的弃用\ \ \的类加载器。/”/供应商/ bin / simple-phpunit
与多个PHPUnit)测试版本
当测试库,必须兼容多个版本的PHP,测试套件不能使用PHPUnit)的最新版本,因为:
- PHPUnit) 8弃用几种方法的其他方法不可用的旧版本(例如PHPUnit) 4);
- PHPUnit) 8补充道
无效
返回类型为设置()
方法,该方法用PHP 5.5不兼容; - PHPUnit)转换为名称空间类从PHPUnit) 6,所以测试必须使用,没有名称空间。
Polyfills不可用的方法
当使用simple-phpunit
脚本,PHPUnit)桥注入polyfills对大多数的方法TestCase
和断言
类(如。expectException ()
,expectExceptionMessage ()
,assertContainsEquals ()
等)。这允许写测试用例使用最新的最佳实践的同时仍与旧PHPUnit)版本兼容。
删除Void返回类型
运行时的simple-phpunit
脚本的ob娱乐下载SYMFONY_PHPUNIT_REMOVE_RETURN_TYPEHINT
环境变量设置为1
PHPUnit)桥将改变PHPUnit)删除的代码返回类型(引入PHPUnit) 8)设置()
,tearDown ()
,setUpBeforeClass ()
和tearDownAfterClass ()
方法。这允许您编写一个测试兼容PHP 5和PHPUnit) 8。
或者,您可以使用特征SetUpTearDownTrait,它提供了正确的签名设置()
,tearDown ()
,setUpBeforeClass ()
和tearDownAfterClass ()
调用方法和代表doSetUp ()
,doTearDown ()
,doSetUpBeforeClass ()
和doTearDownAfterClass ()
方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
使用PHPUnit)\框架\TestCase;使用ob娱乐下载\桥\PhpUnit)\SetUpTearDownTrait;类MyTest扩展TestCase{/ /当使用SetUpTearDownTrait、方法像doSetUp ()/ /定义和没有空隙的返回类型,如你所愿使用SetUpTearDownTrait;私人函数doSetUp(){/ /……}受保护的函数doSetUp():无效{/ /……}}
使用名称空间PHPUnit)类
PHPUnit)大桥添加名称空间类别名的大部分PHPUnit)类声明没有名称空间(如。PHPUnit_Framework_Assert
),允许你总是使用名称空间类声明甚至在执行测试时PHPUnit) 4。
对时间敏感的测试
用例
如果你有这种与时间相关的测试:
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年,美元持续时间);}}
你的持续时间计算过程使用秒表实用程序分析Symfonob娱乐下载y应用程序。然而,根据服务器的负载或在本地机器上运行的进程,美元的持续时间
例如可以10.000023秒
而不是十年代
。
这种测试被称为瞬态测试:他们没有根据伪随机和外部环境。他们经常使用公共持续集成服务时带来麻烦特拉维斯CI。
时钟嘲笑
的ClockMock这座桥提供的类允许您模拟PHP的内置时间函数时间()
,()
,睡眠()
,usleep ()
和函数()
。另外的功能日期()
是嘲笑所以它使用嘲笑时间如果没有指定时间戳。
其他功能和一个可选参数,默认时间戳时间()
仍将使用系统时间而不是嘲笑。这意味着你可能需要改变一些代码测试。例如,而不是新的DateTime ()
,您应该使用DateTime: createFromFormat (“U”,时间())
使用嘲笑时间()
函数。
使用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 33
/ /使用时间()函数的类被嘲笑了名称空间应用程序;类MyClass{公共函数getTimeInHours(){返回时间()/3600年;}}/ /测试,模拟外部时间()函数显式地名称空间应用程序\测试;使用应用程序\MyClass;使用PHPUnit)\框架\TestCase;使用ob娱乐下载\桥\PhpUnit)\ClockMock;/ * * *@group对时间敏感的* /类MyTest扩展TestCase{公共函数testGetTimeInHours(){ClockMock::注册(MyClass::类);美元我的=新MyClass ();美元结果=美元我的- >getTimeInHours ();美元这- >assertequal() /(时间3600年,美元结果);}}
提示
使用一个额外的好处ClockMock
类是时间的流逝。使用PHP的睡眠(10)
会使你的实际测试等待10秒(或多或少)。相比之下,ClockMock
类进步的内部时钟的秒数没有实际等待时间,因此您的测试将执行10秒更快。
DNS-sensitive测试
测试网络连接,例如检查DNS记录的有效性,可以执行缓慢和不可靠网络的条件。出于这个原因,该组件还提供了模拟这些PHP函数:
- checkdnsrr
- dns_check_record
- getmxrr
- dns_get_mx
- gethostbyaddr
- gethostbyname
- gethostbynamel
- dns_get_record
用例
考虑下面的例子来测试一个自定义类DomainValidator
它定义了一个checkDnsRecord
选项也验证域相关联到一个有效的主持人:
1 2 3 4 5 6 7 8 9 10 11 12 13
使用应用程序\验证器\DomainValidator;使用PHPUnit)\框架\TestCase;类MyTest扩展TestCase{公共函数testEmail(){美元验证器=新DomainValidator ([“checkDnsRecord”= >真正的]);美元isValid=美元验证器- >validate (“example.com”);/ /……}}
为了避免使一个真正的网络连接,添加@dns-sensitive
注释的类,并使用DnsMock: withMockedHosts ()
配置数据能够得到给定主机:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
使用应用程序\验证器\DomainValidator;使用PHPUnit)\框架\TestCase;使用ob娱乐下载\桥\PhpUnit)\DnsMock;/ * * *@groupdns-sensitive * /类DomainValidatorTest扩展TestCase{公共函数testEmails(){DnsMock::withMockedHosts ([“example.com”= > [[“类型”= >“一个”,“知识产权”= >“为1.2.3.4”]]]);美元验证器=新DomainValidator ([“checkDnsRecord”= >真正的]);美元isValid=美元验证器- >validate (“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”,]]]);
基于类存在的测试
测试不同取决于现有的类,例如作曲家的发展依赖关系,往往是难以测试的备用情况。出于这个原因,该组件还提供了模拟这些PHP函数:
用例
考虑下面的例子,依赖于供应商\ DependencyClass
切换行为:
1 2 3 4 5 6 7 8 9 10 11 12 13
使用供应商\DependencyClass;类MyClass{公共函数你好():字符串{如果(class_exists (DependencyClass::类)){返回“依赖的行为。”;}返回默认的行为。;}}
常规的测试用例MyClass
(假设的发展依赖安装在测试)看起来像:
1 2 3 4 5 6 7 8 9 10 11 12 13
使用MyClass;使用PHPUnit)\框架\TestCase;类MyClassTest扩展TestCase{公共函数testHello(){美元类=新MyClass ();美元结果=美元类- >你好();/ /“依赖的行为。”/ /……}}
为了测试而不是使用默认行为ClassExistsMock: withMockedClasses ()
配置将类、接口和/或代码运行的特征:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
使用MyClass;使用PHPUnit)\框架\TestCase;使用供应商\DependencyClass;类MyClassTest扩展TestCase{/ /……公共函数testHelloDefault(){ClassExistsMock::注册(MyClass::类);ClassExistsMock::withMockedClasses ([DependencyClass::类= >假]);美元类=新MyClass ();美元结果=美元类- >你好();/ /默认行为。/ /……}}
故障排除
的@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=“https://schema.phpunit.de/4.1/phpunit.xsd”>< !——……- - ><听众><侦听器类=“ob娱乐下载Symfony \ \ PhpUnit) \ SymfonyTestsListener桥”><参数><数组><元素关键=“时效性”><字符串>ob娱乐下载Symfony \ \ HttpFoundation组件< /字符串>< /元素>< /数组>< /参数>< /侦听器>< /听众>< /phpunit)>
在引擎盖下,PHPUnit)侦听器注入嘲笑函数的测试类的名称空间。为了正常工作,听者必须在测试之前运行类运行。
默认情况下,嘲笑函数时创建的注释和相应的运行测试。根据您的测试是如何构造的,这可能是太迟了。
你可以:
- 声明的名称空间在您的测试类
phpunit.xml.dist
; - 注册名称空间的尽头
配置/ bootstrap.php
文件。
1 2 3 4 5 6 7 8 9 10 11
< !——phpunit.xml。区域- - >< !——……- - ><听众><侦听器类=“ob娱乐下载Symfony \ \ PhpUnit) \ SymfonyTestsListener桥”><参数><数组><元素关键=“时效性”><字符串>Acme \ MyClassTest< /字符串>< /元素>< /数组>< /参数>< /侦听器>< /听众>
1 2 3 4 5 6 7
/ /配置/ bootstrap.php使用ob娱乐下载\桥\PhpUnit)\ClockMock;/ /……如果(“测试”= = =美元_SERVER(“APP_ENV”){ClockMock::注册(“Acme \ \ MyClassTest \ \”);}
PHPUnit)修改脚本
这座桥提供PHPUnit)的修改版本,您可以通过使用它的调用bin / simple-phpunit
命令。它具有以下特点:
- 与一个独立的供应商目录,不与你发生冲突;
- 不嵌入
预言
与其依赖关系,以防止任何冲突; - 收集和回放时跳过测试
ob娱乐下载SYMFONY_PHPUNIT_SKIPPED_TESTS
env var定义:env var应该指定一个文件名,将用于存储在第一次运行跳过测试,然后重复它们在第二次运行; - 对测试套件执行当给定一个目录作为参数,扫描该目录
phpunit.xml.dist
文件到ob娱乐下载SYMFONY_PHPUNIT_MAX_DEPTH
水平(env var,指定默认值3
);
脚本编写修改PHPUnit)它构建在一个可配置的目录ob娱乐下载SYMFONY_PHPUNIT_DIR
env var,或在相同的目录中simple-phpunit
如果不提供。也可以设置这个env varphpunit.xml.dist
文件。
默认情况下,这些PHPUnit)版本使用取决于安装的PHP版本:
安装PHP版本 | PHPUnit)版本默认情况下使用 |
---|---|
PHP < = 5.5 | PHPUnit) 4.8 |
PHP 5.6 | PHPUnit) 5.7 |
PHP 7.0 | PHPUnit) 6.5 |
PHP 7.1 | PHPUnit) 7.5 |
PHP > = 7.2 | PHPUnit) 8.3 |
如果你已经安装了桥通过作曲家,您可以运行它通过调用。例如:
1
美元供应商/ bin / simple-phpunit
提示
可以改变PHPUnit)的基本版本通过设置ob娱乐下载SYMFONY_PHPUNIT_VERSION
env var的phpunit.xml.dist
文件(如。< server name ob娱乐下载= " SYMFONY_PHPUNIT_VERSION " value = " 5.5 " / >
)。这是首选方法,因为它可以致力于您的版本控制存储库。
也可以设置ob娱乐下载SYMFONY_PHPUNIT_VERSION
作为一个真正的env var(未定义dotenv文件)。
同样的,ob娱乐下载SYMFONY_MAX_PHPUNIT_VERSION
将最大的版本PHPUnit)被认为是。这是非常有用的在测试框架,不支持PHPUnit)的最新版本(s)。
5.2
的ob娱乐下载SYMFONY_MAX_PHPUNIT_VERSION
env变量是在Symfony 5.2中引入的。ob娱乐下载
提示
如果你仍然需要使用预言
(但不ob娱乐下载symfony / yaml
),然后设置ob娱乐下载SYMFONY_PHPUNIT_REMOVE
env var来ob娱乐下载symfony / yaml
。
也可以设置这个env varphpunit.xml.dist
文件。
代码覆盖率侦听器
默认情况下,代码覆盖率计算使用以下规则:如果一行代码执行,那么它被标记为覆盖。因此测试将执行一行代码标记为“覆盖行代码”。这可能会误导人。
考虑下面的例子:
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 33 34 35
类酒吧{公共函数barMethod(){返回“酒吧”;}}类喷火{私人美元酒吧;公共函数__construct(酒吧美元酒吧){美元这- >酒吧=美元酒吧;}公共函数fooMethod(){美元这- >酒吧- >barMethod ();返回“酒吧”;}}类脚扩展PHPUnit)\框架\TestCase{公共函数测试(){美元酒吧=新酒吧();美元喷火=新Foo (美元酒吧);美元这- >assertSame (“酒吧”,美元喷火- >fooMethod ());}}
的脚:测试
方法执行每一行代码喷火
和酒吧
类,但酒吧
不是真正的考验。的CoverageListener
旨在解决这个问题通过添加适当的行为@covers注释在每一个测试类。
如果一个测试类已经定义了@covers
没有注释,这侦听器。否则,它试图找到相关的代码到测试的测试
部分的名称:我\名称空间\ \脚测试
- >我\名称空间\ Foo
。
安装
添加以下配置的phpunit.xml.dist
文件:
1 2 3 4 5 6 7 8 9 10 11
< !——http://phpunit.de/manual/6.0/en/appendixes.configuration.html——><phpunit)xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: noNamespaceSchemaLocation=“https://schema.phpunit.de/6.0/phpunit.xsd”>< !——……- - ><听众><侦听器类=“ob娱乐下载Symfony \ \ PhpUnit) \ CoverageListener桥”/ >< /听众>< /phpunit)>
如果用于查找相关代码的逻辑太简单或不适合您的应用程序,您可以使用自己的SUT(被测系统)解决:
1 2 3 4 5 6 7
<听众><侦听器类=“ob娱乐下载Symfony \ \ PhpUnit) \ CoverageListener桥”><参数><字符串>我的\ \ SutSolver:名称空间:解决< /字符串>< /参数>< /侦听器>< /听众>
的我的\ \ SutSolver:名称空间:解决
可以是任何PHP调用和接收当前测试作为它的第一个参数。
最后,听众也可以显示警告消息当SUT的解算器找不到SUT:
1 2 3 4 5 6 7 8
<听众><侦听器类=“ob娱乐下载Symfony \ \ PhpUnit) \ CoverageListener桥”><参数><零/ ><布尔>真正的< /布尔>< /参数>< /侦听器>< /听众>