我在路由上运行单元测试。有趣的是:PHPUnit对测试文件中的第一个测试说“一切都好” ,但是如果只对文件中的第二个测试说“ 完全未定义”,则对完全相同的测试失败。
我试图只创建虚拟测试
$this->assertTrue(true);
Run Code Online (Sandbox Code Playgroud)
并把它作为第一个测试,第二个测试正是在做一些工作:
$this->call('GET', "http:.....");
$this->assertRedirectedToRoute('login');
Run Code Online (Sandbox Code Playgroud)
它失败了。
但是,如果它在文件中排在第一位,则相同的测试也会使我成功。很奇怪。
有谁知道为什么会这样?
我读过一些人测试过,有些人没有.你什么时候进行单元测试getter/setter?
如果我想跳过单元测试getter和setter,我将如何使用PHPUnit管理它(跳过所有getter和setter)?
我有一个基于Laravel 5的网站,并且希望在其上运行PHPUnit测试:为此,我的测试文件夹中包含以下文件:
ExampleTest.php
<?php
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class ExampleTest extends TestCase
{
/**
* A basic functional test example.
*
* @return void
*/
public function testBasicExample()
{
$this->visit('/')
->see('Laravel 5');
}
}
Run Code Online (Sandbox Code Playgroud)
NewTest.php
<?
class Example22Test extends TestCase
{
/**
* My test implementation
*/
public function testEncryptionIsIntelligent()
{
$this->visit('/')
->see('Laravel 5')
->visit('/auth/login')
->type('test.admin@', 'email')
->type('test.admin@eatlaravel.hu', 'email')
->type('admin', 'password')
->press('')
->seePageIs('/admin')
->see('Welcome to the dashboard')
->visit('/');
}
}
Run Code Online (Sandbox Code Playgroud)
TestCase.php
<?php
#class TestCase extends Illuminate\Foundation\Testing\TestCase
abstract class …Run Code Online (Sandbox Code Playgroud) 所以问题是:有没有办法直接在注释中指定测试参数?像这样的东西:
/**
* @dataProvider [[0, 0, 0], [0, 1, 1], [1, 0, 1]]
*/
public function testAdd($a, $b, $expected)
{
$this->assertEquals($expected, $a + $b);
}
Run Code Online (Sandbox Code Playgroud)
因为如果DataProvider仅使用简单数据集一次就很有用.
我有一个PHPUnit测试,循环遍历一个无效值数组,并断言每个函数都正确拒绝了.
例如,validateInput仅当输入是字符串时才返回true,否则返回false.
public function testValidateInput()
{
$obj = new MyClass();
$data = [
null,
42,
21.21,
-24,
-12.12,
false,
array('key' => 'value'),
(object) 'value'
];
foreach ($data as $item){
$this->assertSame(false, $obj->validateInput($item));
}
}
Run Code Online (Sandbox Code Playgroud)
当测试失败时,我只得到行号 - 这对于所有值都是相同的,因为它在一个循环中.
Run Code Online (Sandbox Code Playgroud)1) MyClassTest::testValidateInput Failed asserting that true is identical to false. /home/jeff/MyClass/tests/MyClassTest.php:24
如何确定断言失败的值?
我是Lumen(和Laravel)的新手.我用Composer创建了一个项目,现在我正在尝试让PHPUnit工作.
我正在关注一本书,在那里应该可以通过键入vendor/bin/phpunit终端来运行默认的传递测试,但它会给出错误:
'vendor'不被识别为内部或外部命令,可操作程序或批处理文件
我已经检查过phpunit文件实际存在,并且我的composer.json文件中将phpunit添加为依赖项.我也试过./vendor/bin/phpunit和vendor/bin/phpunit/phpunit,但具有相同的结果.
我搜索谷歌寻找解决方案,但其他人似乎在运行时遇到问题phpunit(没有供应商/ bin),解决方案是使用完整路径vendor/bin/phpunit,但是因为我已经这样做了,所以不解决我的问题.
我在Windows机器上使用PHPStorm并通过PHPStorm运行PHP服务器.我没有修改默认的Lumen项目.
任何帮助是极大的赞赏!
更新:
尝试php vendor/bin/phpunit给出以下错误:
您需要使用以下命令设置项目依赖项:
wget http://getcomposer.org/composer.phar
php composer.phar install
我不确定这意味着什么,因为我已经安装了Composer.我使用Composer创建项目,但我没有更改默认的依赖项.
每当我vendor/bin/phpunit在laravel项目的根路径中执行时,它都会返回Permission denied错误.我该如何解决这个问题?
重要提示:我不想使用composer update或删除部分或全部vendor/目录然后使用,composer install因为这些方法会改变太多文件,我的主人不会同意.
ps:lrwxrwxrwx 1工作26 Jul 21 07:10 phpunit - > ../phpunit/phpunit/phpunit
-rwxrwxrwx 1 work work 1199 Jul 22 08:19 ./vendor/phpunit/phpunit/phpunit
并且 chmod 775 -R vendor不起作用.
我希望能够测试结果是一封电子邮件(myMail@provider.com ..)
我试过用它来测试它是否是字符串:
$this->assertInternalType('string', $myExpectedEmail);
Run Code Online (Sandbox Code Playgroud)
但我认为这不是很准确......我试过这个:
$this->assertInternalType('email', $myExpectedEmail);
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
Type specified for PHPUnit_Framework_Constraint_IsType <email> is not a valid type.
Run Code Online (Sandbox Code Playgroud)
如何在PHPunit中测试电子邮件格式的任何想法/最佳实践?
在潜入PHP Unit的文档时,我发现如果测试失败,应该调用的函数,即onNotSuccessfulTest。
但是是否有功能或任何方法可以用来指示测试成功?
比如我有3次测试,TestOne,TestTwo,TestThree。虽然我可以确定其中一项测试是否成功,但可以检查所有这些测试是否都以成功结束,并据此采取措施吗?
我试图在PHPUnit测试中捕获异常,但它不能像我预期的那样工作.异常似乎陷入了更高的层次,我不明白为什么.
public function testException()
{
echo 'Enter';
try {
throw new Exception('error.');
} catch (Exception $e) {
echo 'catch Exception';
}
echo 'End';
}
Run Code Online (Sandbox Code Playgroud)
在输出中,只有'Enter'可见.我没有达到'结束'.(我使用的是PHP7)
谢谢
编辑:更换所有Exception以\Exception解决我的问题