【问题标题】:Test every time is skipped by PHPUnit每次测试都被 PHPUnit 跳过
【发布时间】:2015-11-27 01:30:51
【问题描述】:

我正在使用 PHPUnit 和 CakePHP 来测试 Custom Finder 但每次都跳过测试,我不知道是什么原因

好的,但不完整、被跳过或有风险的测试!

测试用例:

class UsersTableTest extends TestCase
{ 

public $fixtures = [
'app.users',
        'app.user_types',
        'app.bookings',
        'app.stores'
    ];

    public function setUp()
    {
        parent::setUp();
        $this->Users = TableRegistry::get('Users');
    }

public function testFindUser(){
    $query = $this->Users->find('user', [
        'fields' => ['Users.id', 'Users.email', 'Users.password',
            'Users.username'],
        'conditions' => ['Users.id' => 900000]
    ]);
    $this->assertInstanceOf('Cake\ORM\Query', $query);
    $result = $query->hydrate(false)->toArray();

    $expected = [
        [
            'id' => 900000,
            'email' => 'usuariocomum1@gmail.com',
            'password' => 'usuariocomum1senha',
            'username' => 'usuariocomum1username'
        ]
    ];

    $this->assertEquals($expected, $result);
}

测试方法:

public function findUser(Query $query, array $options){
    $query->where($options);
    return $query;
}

用户装置:

public $records = [
    [
        'id' => 900000,
        'email' => 'usuariocomum1@gmail.com',
        'password' => 'usuariocomum1senha',
        'username' => 'usuariocomum1username',
        'user_type_id' => 900000,
        'created' => '2015-07-17 18:46:47',
        'modified' => '2015-07-17 18:46:47'
    ]
]

我正在关注本教程CakePHP 3.0 Testing

[编辑 1]

带有 --verbose 标志:

c:\xampp\htdocs\PROJETOS\Shopping>vendor\bin\phpunit --verbose tests\TestCase\Mo
del\Table\UsersTableTest
PHPUnit 4.8.6 by Sebastian Bergmann and contributors.

Runtime:        PHP 5.6.3
Configuration:  C:\xampp\htdocs\PROJETOS\Shopping\phpunit.xml.dist

III.

Time: 15.87 seconds, Memory: 7.50Mb

There were 3 incomplete tests:

1) App\Test\TestCase\Model\Table\UsersTableTest::testInitialize
Not implemented yet.

C:\xampp\htdocs\PROJETOS\Shopping\tests\TestCase\Model\Table\UsersTableTest.php:
58

2) App\Test\TestCase\Model\Table\UsersTableTest::testValidationDefault
Not implemented yet.

C:\xampp\htdocs\PROJETOS\Shopping\tests\TestCase\Model\Table\UsersTableTest.php:
71

3) App\Test\TestCase\Model\Table\UsersTableTest::testBuildRules
Not implemented yet.

C:\xampp\htdocs\PROJETOS\Shopping\tests\TestCase\Model\Table\UsersTableTest.php:
81

OK, but incomplete, skipped, or risky tests!
Tests: 4, Assertions: 2, Incomplete: 3.

[编辑 2]

当我将测试更改为:

public function testFindUser(){
    $query = $this->Users->find('user', [
        'fields' => ['Users.id', 'Users.email', 'Users.password',
            'Users.username', 'Users.user_type_id', 'Users.created',
            'Users.modified'],
        'conditions' => ['Users.id' => 900000]
    ]);
    $this->assertInstanceOf('Cake\ORM\Query', $query);
    $result = $query->hydrate(false)->toArray();

    $expected = [
        [
            'id' => 900000,
            'email' => 'usuariocomum1@gmail.com',
            'password' => 'usuariocomum1senha',
            'username' => 'usuariocomum1username',
            'user_type_id' => 900000,
            'created' => '2015-07-17 18:46:47',
            'modified' => '2015-07-17 18:46:47'

        ]
    ];

    $this->assertEquals($expected, $result);
}

测试执行但失败(hidrate(false) 可以创建和修改原始对象)(为什么现在可以工作?为什么显示'user_type_id' => 900000

我的控制台:

c:\xampp\htdocs\PROJETOS\Shopping>vendor\bin\phpunit tests\TestCase\Model\Table\
UsersTableTest
PHPUnit 4.8.6 by Sebastian Bergmann and contributors.

IIIF

Time: 8.13 seconds, Memory: 7.75Mb

There was 1 failure:

1) App\Test\TestCase\Model\Table\UsersTableTest::testFindUser
Failed asserting that two arrays are equal.
--- Expected
+++ Actual
@@ @@
         'user_type_id' => 900000
-        'created' => '2015-07-17 18:46:47'
-        'modified' => '2015-07-17 18:46:47'
+        'created' => Cake\I18n\Time Object (...)
+        'modified' => Cake\I18n\Time Object (...)
     )
 )

C:\xampp\htdocs\PROJETOS\Shopping\tests\TestCase\Model\Table\UsersTableTest.php:
107

FAILURES!
Tests: 4, Assertions: 2, Failures: 1, Incomplete: 3.

[编辑 3]

我清理了我的 TestCase 并删除了所有未实现的测试(由 bake 创建),这是输出:

c:\xampp\htdocs\PROJETOS\Shopping>vendor\bin\phpunit tests\TestCase\Model\Table\
UsersTableTest
PHPUnit 4.8.6 by Sebastian Bergmann and contributors.

.

Time: 6.06 seconds, Memory: 7.50Mb

OK (1 test, 2 assertions)
**NOTE** CakePHP 3.0.11 PHPUnit 4.8.6

【问题讨论】:

    标签: php cakephp phpunit cakephp-3.0


    【解决方案1】:

    我们在您的另一个问题中提出了这个问题,不是吗? testFindUser 测试没有被跳过,它运行得很好,正如您从 PHPUnit 输出中可以看出的那样,并且当您更改代码以便它产生和错误,如果它被跳过,就不会失败,输出会是IIIS

    好的,但不完整、被跳过或有风险的测试!
    测试:4,断言:2,不完整:3

    * 强调我的

    总共 4 次测试,3 次未完成,= 1 次测试运行

    消息只是说存在不完整/未实现的测试,另外除了运行 OK 的测试。

    详细级别的输出使这一点更加清晰,可以准确地向您显示哪些测试不完整 - 它们都不是您的 testFindUser 测试。

    您可能需要仔细查看文档,以了解如何解释输出。

    https://phpunit.de/manual/current/en/textui.html

    【讨论】:

    • 好的,我删除了所有未实现的测试(由 bake 创建)并将结果放在我的问题的编辑 3 中,你能看到吗?
    • @ricardo 是的,我可以看到它,这是预期的输出,它表明 1 个带有 2 个断言的测试运行成功。
    • @ndn 你能解释一下我是如何在 [EDIT 2] 中测试的吗?因为我期望一个字符串,但我收到一个对象
    • @ricardo Hydration 是将数据转换为实体对象结构的过程,值的数据类型不受影响,即基于时间的列将始终转换为时间类实例(除非您覆盖default type mapping),整数保持整数等...在您的比较数据集中创建时间实例,如'created' => new \Cake\I18n\Time('2015-07-17 18:46:47') 应该可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 2017-12-05
    • 2016-10-29
    • 2012-09-12
    相关资源
    最近更新 更多