如何测试设置受保护属性的构造函数?

daG*_*vis 3 php phpunit unit-testing visibility kohana

好吧,我是单位测试新手(使用phpUnit),刚开始测试我的一类.

实际构造函数如下所示:

/**
 * Loads configuration.
 */
function __construct() {

    $config =
        Kohana::$config->load('koffee');

    $this->_table_name = $config->table_name;
    $this->_table_columns = $config->table_columns;

}
Run Code Online (Sandbox Code Playgroud)

它基本上从另一个文件获取配置,并将其设置为该对象的受保护属性.

以下是单元测试的外观(它没有完成,这就是我需要帮助的地方):

/**
 * Tests that config is loaded and correct.
 */
function testConfigIsLoadedAndCorrect() {

    $object = new Model_Article();

    $config = Kohana::$config->load('koffee');

    // Compare object's **protected** properties to local `$config`. How?!

}
Run Code Online (Sandbox Code Playgroud)

问题是属性受到保护,我无法轻易访问它们......

我目前看到的可能的解决方案:

  1. 改变属性的可见性(我不喜欢这个),
  2. 添加,所谓的"getters"到I类测试 - 而不是单元测试(我不喜欢这个);

可能这对你很有意思,但是,正如我所说,我是单位测试的新手.任何帮助非常感谢.

hak*_*kre 8

单元测试是关于单元测试.受保护的成员不是单元的公共接口的一部分,这是编写单元测试时应该关注的所有内容.

您不测试单元的内部内部,但它可以按预期工作.

如果你不管是想做这样的东西,你可以使用序列化文档,铸造阵列反思文档检查保护/对象的私有属性或执行对象的保护/私有方法.


另见: PhpUnit私有方法测试SO Q&A

  • (*相关*):[`Stackoverflow:phpunit-private-method-testing`](http://stackoverflow.com/questions/5937845/phpunit-private-method-testing/5937899#5937899) - 相同的一般答案,一些更多代码示例和动机.+1 (2认同)