PHPUnit和Abstract类:如何测试接受参数和其他具体方法的具体构造函数

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHPUnit和Abstract类:如何测试接受参数和其他具体方法的具体构造函数脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个非常简单的类,如下所示:
abstract class PErson
{
    PRivate $id;
    private $createdOn;

    // ... More private properties

    protected $unfound = array();

构造函数对传递的数组$data执行操作,并使用正确的方法将值分配给属性.
如果该方法不存在,那么将密钥添加到受保护的数组中以保留它的跟踪(我称之为$unfound,只是为了原始!).

public function __construct($data)
    {
        foreach ($data as $field => $value)
        {
            $method = 'set' . ucFirst($field);

            if (method_exists($this,$method))
            {
                $this->$method($value);
            }
            else
            {
                $this->unfound[] = $field;
            }
        }
    }

设置属性值的方法列表

public function setId($id) {
        $this->id = $id;
    }

    public function setCreatedOn($createdOn) {
        $this->createdOn = $createdOn;
    }

以及获取这些指定值的方法列表

public function getId() {
        return $this->id;
    }

    public function getCreatedOn() {
        return $this->createdOn;
    }
} // END of the class

如您所见,该类不执行任何复杂的任务:它接受类似的数组

array(
    'id' => 4,'createdOn' => '2015-01-07 20:50:00','unkNownVAR' => 'mah'
    // ... Other properties to set
    );

因此,类循环遍历数组并使用键调用正确的方法来设置值.我觉得没什么复杂的.

相反,更复杂的是测试它.

因为它是一个抽象类,我不能直接实例化它,但我必须嘲笑它​​.

我的问题是,我无法传递给构造函数正确的参数来测试值分配是否正确完成.

我试过用类似的东西:

public function testPerson()
{
   $abstractClass = '\My\namespace\Person';

    $testData = array(
        'id' => 1,'createdOn' => '2015-01-07 19:52:00','unfound' => 'Inexistent method'
        );

   $methods = array(
      'getId','setId'
      );

    $mock = $this->getMockBuilder($abstractClass)
        ->setConstructorargs(array($testData))
        ->setMethods($methods)
        ->getMockForAbstractClass();

    $this->assertEquals($testData['id'],$mock->getId());
}

在testPerson()中,$methods变量不包含我需要的所有方法,但是对于测试的测试(请原谅我玩文字!:))我认为它们已经足够了.

PHPUnIT告诉我:

Failed asserting that null matches expected 1.

似乎构造函数没有被调用,如果代码覆盖率告诉我方法调用.

是否有人可以帮助我了解正在发生的事情以及如何测试这门课程?

谢谢!

解决方案非常简单:删除$methods变量并调用setMethods($methods)解决了这个问题!

事实上,调用setMethods(),“stubs”那些没有设置适当的固定值的方法被设置为null(我从测试结果中收到的值).

我测试的方法是顽固的而其他方法没有.

所以print_r($mock)显示其他值已正确设置.

这么简单但很难找到!无论如何,谢谢你让我思考,所以我解决了问题并提出了问题!

脚本宝典总结

以上是脚本宝典为你收集整理的PHPUnit和Abstract类:如何测试接受参数和其他具体方法的具体构造函数全部内容,希望文章能够帮你解决PHPUnit和Abstract类:如何测试接受参数和其他具体方法的具体构造函数所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。