PHP单元测试一个具有特征的类

时间:2017-06-14 00:46:07

标签: php unit-testing mocking phpunit traits

我刚开始使用PHP并且正在为一些遗留代码编写一些测试。我这里有一个有特点的课。如何测试该类在函数中使用特征方法的方法?

trait Cooltrait
{
  public function extractMethod($z){
     return $z[0];
  }
}

class Awesome
{
  using Cooltrait

  public function handlesomething($x, $y){
    $var1 = $this->extractMethod($x)

    if(!is_null($var1)){
      return true;
    }

    return false;
  }
}

我需要测试$ var1在类中是否为null,但我正在使用此特征的方法。有没有人遇到如何在类中最好地模拟/存根特性来测试 Awesome 类中的 hadlesomething 函数? (编辑澄清问题)。

1 个答案:

答案 0 :(得分:0)

如果您正在测试Awesome,您可以假设特征在运行时是其中的一部分。如果您想单独测试Cooltrait,可以使用getMockForTrait

在这种情况下; “我需要测试$ var1是否为null”,它是前者 - 假设在测试时已经应用了特征。

注意:语法为use,而不是using

public function testVarIsNull()
{
    $awesome = new Awesome;
    $result = $awesome->handlesomething(array(null), 'not relevant in your example');
    $this->assertFalse($result);

    $result = $awesome->handlesomething(array('valid'), 'not relevant in your example');
    $this->assertTrue($result);
}

由于extractMethod是公开的,您也可以单独测试该方法:

public function testExtractMethodShouldReturnFirstArrayEntry()
{
    $awesome = new Awesome;
    $this->assertSame('foo', $awesome->extractMethod(array('foo')));
}

...或使用getMockForTrait

public function testExtractMethodShouldReturnFirstArrayEntry()
{
    $cooltrait = $this->getMockForTrait('Cooltrait');
    $this->assertSame('foo', $cooltrait->extractMethod(array('foo')));
}