php - 如何测试设置 protected 属性的构造函数?

标签 php unit-testing kohana phpunit visibility

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

实际构造函数如下所示:

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

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

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

}

它基本上是从另一个文件获取配置并将其设置为该对象的 protected 属性。

这是单元测试的样子(它还没有完成,这就是我需要帮助的地方):

/**
 * 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?!

}

问题是属性是 protected ,我不能那么容易地访问它们...

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

  1. 更改属性的可见性(我不喜欢这样),
  2. 向我测试的类添加所谓的“ setter/getter ”——而不是单元测试(我也不喜欢这样);

您可能觉得这很有趣,但是,正如我所说,我是单元测试的新手。非常感谢任何帮助。

最佳答案

单元测试是关于单元 测试。 protected 成员不是单元的公共(public)接口(interface)的一部分,这是您在编写单元测试时需要关心的全部内容。

您不测试单元的内部结构,而是测试它是否按预期工作。

如果你无论如何都想做这样的事情,你可以使用Serialization­Docs , casting to arrayReflection­Docs检查对象的 protected /私有(private)属性或执行对象的 protected /私有(private)方法。


另见: PhpUnit private method testingSO Q&A

关于php - 如何测试设置 protected 属性的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8648102/

相关文章:

php - 页面内容未在移动设备上显示

php - 无法加载模块 [redis],错误 :/usr/local/lsws//modules/redis. so: undefined symbol: zend_objects_destroy_object

java - JUnitParamsRunner 与 Guice

perl - 我可以判断是否所有测试都通过了 Perl 的 Test::More 吗?

php - Kohana 持久 session 和子域

php - 使用 bool 值php计算mysql中的列总和

php - Laravel 8 将所有异常返回为 json

javascript - 对正在馈送的可观察流进行单元测试的正确方法

php - Kohana 3 ORM - 带括号的条件分组

php - 解析 TWIG 中的变量内容