【发布时间】:2018-05-05 02:09:11
【问题描述】:
我正在尝试在 PHPUnits 中执行一些测试,但它没有被执行。
<?php
use \PHPUnit\Framework\TestCase;
class UserControllerTest extends TestCase {
public function testThatCanGetNumber() {
$mock = $this->getMockBuilder('UserModel')
->setMethods(array('getNumber'))
->getMock();
$mock->expects($this->once())
->method('getNumber')
->with($this->equalTo(5));
}
}
但是,如果我用\PHPUnit_Framework_TestCase 扩展类,它就会被执行。这是为什么呢?
这是我的phpunit.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<phpunit bootstrap="vendor/autoload.php"
colors="true"
verbose="true"
stopOnFailure="false">
<testsuites>
<testsuite name="Test suite">
<directory>tests</directory>
</testsuite>
</testsuites>
</phpunit>
【问题讨论】:
-
PHPUnit 在版本 6 中切换到命名空间。您需要使用 PHPUnit 版本 >= 6 和 \PHPUnit\Framework\TestCase 或 PHPUnit 版本
-
PHPUnit 4 和 PHPUnit 5 都具有向前兼容层,允许使用旧的
PHPUnit_Framework_TestCase和新的PHPUnit\Framework\TestCase类名。 -
我将不得不在这一点上向作者屈服,呵呵。 :)
-
@SebastianBergmann 那么解决方案是什么?我正在使用 PHPunit 6.4(稳定版)。因为使用
PHPUnit_Framework_TestCase不允许我使用$this->getMockBuilder('UserModel'),这也会导致错误提示Fatal error: Uncaught TypeError: Argument 1 passed to PHPUnit_Framework_MockObject_MockBuilder::__construct() must be an instance of PHPUnit\Framework\TestCase
标签: php unit-testing testing phpunit