"增强PHP"入门

bai*_*ano 6 php unit-testing

我希望将测试框架合并到我正在构建的项目中,并且遇到了我喜欢的增强PHP但我在线查找相关信息有些困难,因为"增强php"是一个常用的短语.

有没有人使用这个框架,可能会指向我一些有用的指南?您是否使用过您认为更好的单元测试框架?

提前致谢.

在回应Gotzofter时,这是要测试的类:

<?php
include_once('EnhanceTestFramework.php');

class ExampleClass
{
    private $OtherClass;

    function __construct($mock = null)
    {
        if ($mock == null)
            $this->OtherClass = new OtherExampleClass();
        else
            $this->OtherClass = $mock;
    }

    public function doSomething()
    {
        return $this->OtherClass->getSomething(1, 'Arg2');
    }
}

class OtherExampleClass
{
    public function getSomething()
    {
        return "Something";
    }
}

class ExampleClassTests extends \Enhance\TestFixture
{
    public function setUp() 
    {
    }

    public function tearDown()
    {
    }

    public function verifyWithAMock() 
    {
        $mock = \Enhance\MockFactory::createMock('OtherExampleClass');
        $mock->addExpectation(
            \Enhance\Expect::method('getSomething')
                ->with(1, 'Arg2')
                ->returns('Something')
                ->times(1)
            );
        $target = new ExampleClass($mock);
        $result = $target->doSomething();
        \Enhance\Assert::areIdentical("Something", $result);

        $mock->verifyExpectations();
    }
}

\Enhance\Core::runTests();
Run Code Online (Sandbox Code Playgroud)

看一下ExampleClass的构造函数.

因为enhance-php的网站示例通过调用new ExampleClass($ mock)来注入$ mock对象,所以我不得不更改我的ExampleClass构造函数来处理$ mock作为输入参数.

对于我想要使用框架进行单元测试的所有类,我是否必须处理此问题?

谢谢.

Gut*_*ter 3

这:

function __construct()
{
   $this->OtherClass = new OtherExampleClass;
}
Run Code Online (Sandbox Code Playgroud)

应该:

function __construct($otherClass)
{
   $this->OtherClass = $otherClass;
}
Run Code Online (Sandbox Code Playgroud)

此时在测试中永远不会注入您的模拟:

   $target = new ExampleClass($mock);
Run Code Online (Sandbox Code Playgroud)