【发布时间】:2012-08-27 22:12:52
【问题描述】:
假设我有一个 Config 类型的对象,它或多或少地存储了一堆键/值对。如果值是一个数组,它会将数组转换为一个新的 Config 实例,并在其中存储数组的值。当然,这可以在多个级别上无限期地进行。
模拟这种类型的对象的最佳方法是什么?我对 PHPUnit 还很陌生,所以很可能存在一个非常简单的解决方案,但目前我不确定如何继续。
根据我目前的经验,创建 Config 的模拟也不会传播到包含的 Config 对象(在我的 __set() 魔术方法中,它基本上是在到达 @987654322 中的嵌套数组时调用 new self($array) @。
以下是对象应如何表现的示例:
$data = array(
'one' => 'unus',
'two' => 'duo',
'three' => array(
'a' => 'alpha',
'b' => 'beta'
)
);
$config = new Config($data);
// I should be able to do this:
echo $config->three->a; // Outputs "alpha"
echo get_class($config->three); // Outputs "Config"
【问题讨论】:
-
您必须为每个模拟实例调用
$this->getMock,但Config直接使用new。无论如何,您都需要对模拟设定期望。您能否提供一个您认为需要模拟的示例测试?看来您应该按原样使用这些对象,因为它们是简单的数据持有者。 -
为什么要模拟这个对象?它似乎只是一个数据对象。我会创建一个新的真实 Config 对象并传递一些假数据。
标签: php unit-testing phpunit