PHPUnit中的测试用例类型

sam*_*ayo 1 php phpunit unit-testing

我是PHPUnit的新手,事实上我今天开始了.而且,据我所读,我开始只了解这个脚本的作用.

class UserTest extends PHPUnit_Framework_TestCase
{
     protected $user;

    // test the talk method
    protected function setUp() {
        $this->user = new User();
        $this->user->setName("Tom");
    }

    protected function tearDown() {
        unset($this->user);
    }

 public function testTalk() {
        $expected = "Hello world!";
        $actual = $this->user->talk();
        $this->assertEquals($expected, $actual);
    }

}
Run Code Online (Sandbox Code Playgroud)

对于这堂课:

<?php
class User {
    protected $name;

    public function getName() {
        return $this->name;
    }

    public function setName($name) {
        $this->name = $name;
    }

    public function talk() {
        return "Hello world!";
    }
} 
Run Code Online (Sandbox Code Playgroud)

好的,所以我已经确定测试会根据测试的相等性返回Ok/Fail语句,但我要找的更多.我需要一种实际的方法来测试一个更复杂的类,它的结果,在这个例子中不喜欢,不能轻易猜到.

说,我写了一个执行轮询的脚本.如果方法/类可以工作,我将如何测试或以何种方式测试?上面的代码只显示方法结果是否只会是,'Hello World'但是,测试太容易了,因为我需要测试复杂的东西,并没有太多的教程.

Sve*_*ven 7

在单元测试中测试类应该不复杂.

这样做的原因在于,在一个设计良好的系统中,您可以单独测试该类,并且不会在该类后面添加系统的复杂性 - 因为在测试期间该系统不存在,它被模拟.

这方面的经典示例是User类通常会向数据库询问信息,但在测试用例中,该数据库实际上很难设置,准备数据并在之后销毁.使用真实数据库也会降低速度.因此,您将User类设计为从外部接受数据库对象,并在测试用例中为其提供数据库的模拟对象.

这样,从数据库中模拟各种返回值非常简单,此外,您可以检查数据库对象是否获得正确的参数,而无需处理真实数据库的复杂性.

如果您的类被设计为允许依赖注入,则只能执行正确的模拟对象注入.这是一个原则,不在其他对象内创建对象,但需要外部世界提供它们.只需快速浏览一些视频即可获得解释:

请记住,创建好的测试需要一些经验.很适合你开始试验.