好吧,我是单元测试(使用 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 ,我不能那么容易地访问它们...
目前我看到的可能的解决方案:
- 更改属性的可见性(我不喜欢这样),
- 向我测试的类添加所谓的“ setter/getter ”——而不是单元测试(我也不喜欢这样);
您可能觉得这很有趣,但是,正如我所说,我是单元测试的新手。非常感谢任何帮助。
最佳答案
单元测试是关于单元 测试。 protected 成员不是单元的公共(public)接口(interface)的一部分,这是您在编写单元测试时需要关心的全部内容。
您不测试单元的内部结构,而是测试它是否按预期工作。
如果你无论如何都想做这样的事情,你可以使用SerializationDocs , casting to array和 ReflectionDocs检查对象的 protected /私有(private)属性或执行对象的 protected /私有(private)方法。
关于php - 如何测试设置 protected 属性的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8648102/