Muy*_*Olu 74 php phpunit unit-testing
为了提高我的代码质量,我决定尝试学习如何使用单元测试而不是我最平庸的测试解决方案来测试我的代码.
我决定使用composer安装PHPUnit,用于个人库,允许我实现常见的数据库功能.起初我没有PHPUnit的配置文件,当我运行如下命令:
$ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest
Run Code Online (Sandbox Code Playgroud)
请注意,这是一个终端命令,所以我没有包含.php扩展名.上面提到的GeneralStringFunctionsTest实际上是一个GeneralStringFunctionsTest.php文件.
输出是我的预期:
时间:31毫秒,内存:2.75Mb
好的(1个测试,1个断言)
然后,我尝试使用配置文件自动加载测试套件,而不必每次都手动输入文件.我创建了一个phpunit.xml在我的根目录中调用的文件,并在文件中输入以下内容:http://pastebin.com/0j0L4WBD:
<?xml version = "1.0" encoding="UTF-8" ?>
<phpunit>
<testsuites>
<testsuite name="Tests">
<directory>tests</directory>
</testsuite>
</testsuites>
</phpunit>
Run Code Online (Sandbox Code Playgroud)
现在,当我运行命令时:
phpunit
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
Sebastian Bergmann和贡献者的PHPUnit 4.5.0.
配置从/Users/muyiwa/Projects/DatabaseHelper/phpunit.xml中读取
时间:16毫秒,内存:1.50Mb
没有执行测试!
如果它有用,我的目录结构如下:
src - 顶级目录(包含我的所有源代码)
测试 - 顶级目录(包含我的所有测试,结构与我的src文件夹相同)
供应商 - Composer第三方文件
我还有作曲家json和锁定文件,以及顶层的phpunit xml文件作为文件.
phpunit.xml为tests/GeneralStringFunctionsphpunit.xml为./testsphpunit.xml文件移动到tests目录,然后将目录更改为./而不是tests.phpunit.xml以将"测试"指定为显式后缀.Rob*_*ear 165
为了它的价值(迟到),我最近遇到了这个问题,而我正在为一个简单的网站制作一个新的Laravel 5.1项目.我尝试调试它,当我尝试时感到困惑:
php artisan make:test homeTest
Run Code Online (Sandbox Code Playgroud)
(它有一个只是断言为true的默认测试是真的)
并看到了输出
No tests executed!
Run Code Online (Sandbox Code Playgroud)
问题最终对我而言与我的PHP安装有关 - "phpunit"是全局注册和配置不同,而Laravel安装附带的phpunit配置恰到好处并完美运行.
因此修复程序正在运行供应商配置的phpunit(与app /和tests /相同的根目录):
./vendor/bin/phpunit
Run Code Online (Sandbox Code Playgroud)
希望能帮助别人!
Lio*_*nel 82
您的XML文件很好.但是,您必须确保文件tests/夹中的PHP文件的名称如下:
tests/Test.php <---注意大写的"T"
测试/用户Test.php
测试/ fooBar Test.php
等.
文件名必须以"Test.php"结尾.这就是PHPUnit在目录中寻找的东西.
此外,每个测试方法都必须具有以"test"开头的名称:
public function testFooBar()
{
// Your test code
}
Run Code Online (Sandbox Code Playgroud)
希望有所帮助!
Ndo*_*kwo 13
在Windows上,在终端上使用以下命令
.\vendor\bin\phpunit
Run Code Online (Sandbox Code Playgroud)
那是命令
phpunit
Run Code Online (Sandbox Code Playgroud)
返回"没有执行测试!"
在Mac上
./vendor/bin/phpunit
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你.
igo*_*ors 10
我的虚拟机上的PHPUnit更新到版本6后,我遇到了同样的问题.甚至--debug和--verbose没有任何用处,只是"没有执行测试".最后,事实证明在新版本中更改了类和命名空间,它只是不想执行包含对旧类的引用的文件.我的修复只是在每个测试用例中替换:
class MyTestCase extends \PHPUnit_Framework_TestCase {...}
Run Code Online (Sandbox Code Playgroud)
有:
use PHPUnit\Framework\TestCase;
class MyTestCase extends TestCase {...}
Run Code Online (Sandbox Code Playgroud)
我意识到这太老了,但它也发生在我身上。希望这会帮助某人。
我的问题是我忘记了 /** @test */ 中的“@”符号
错误的:
/** test */
function a_thread_can_be_deleted()
{
...
}
Run Code Online (Sandbox Code Playgroud)
对:
/** @test */
function a_thread_can_be_deleted()
{
...
}
Run Code Online (Sandbox Code Playgroud)
在我决定使用--debug(顺便说一句好方法)之前,我拉了我的头发 10 分钟,以发现文件名不遵守命名约定的简单事实,我在末尾有一个额外的“s” .
错误的
CreateAdminTests
Run Code Online (Sandbox Code Playgroud)
对
CreateAdminTest
Run Code Online (Sandbox Code Playgroud)
希望这篇笔记可以对某人有所帮助
参加聚会迟到了,但此信息可能对其他人有所帮助。
以上解决方案对我不起作用。从 Laravel 7.x 开始,默认情况下,PHPUnit 只执行后缀为“Test.php”的 PHP 文件。例如,如果您创建一个测试,命名它是CreateUser行不通的,而命名它却CreateUserTest可以。
为了克服这个限制,从元素去phpunit.xml修改suffix属性directory:
...
<testsuite name="Unit">
<!-- modify suffix -->
<directory suffix=".php">./tests/Unit</directory>
</testsuite>
<testsuite name="Feature">
<!-- modify suffix -->
<directory suffix=".php">./tests/Feature</directory>
</testsuite>
...
Run Code Online (Sandbox Code Playgroud)
这将指示 PHPUnit.php从目录中运行所有带有扩展名的文件。注意更新后清除应用程序的缓存phpunit.xml:
php artisan config:cache
Run Code Online (Sandbox Code Playgroud)
有关 PHPUnit XML 配置的其他信息可以在这里找到:https : //phpunit.de/manual/6.5/en/appendixes.configuration.html
| 归档时间: |
|
| 查看次数: |
40328 次 |
| 最近记录: |