【发布时间】:2012-06-17 15:08:38
【问题描述】:
在重构我的代码库时,我发现了一段代码,我想将其提取到一个单独的类中。
它将为用户个人资料图片提供缩略图。该类(我们将其命名为UserImageManager)将包含一个UserMapper 的实例和一个ImageRenderer 的实例。
现在我确实有一种方法可以检索用户个人资料图片的缓存 url。此方法从UserMapper 中检索User 对象,并使用存储在User 对象中的图像路径触发ImageRenderer 的render 方法。
我为这个小函数编写了一个测试,模拟了ImageRenderer,现在我在这个测试用例中没有一个断言。断言函数的返回值没有任何意义,因为它返回缓存文件路径,该路径由模拟的ImageRenderer 返回。
现在我的问题是:即使没有断言,它仍然是有效的单元测试吗?或者我应该如何重写我的测试,而不仅仅是检查对模拟对象的调用?
// The unit test
public function renderImageWillReturnCacheImagePath() {
$this->_userImageManager->setImage(
// Returns the ImageRenderer mock
$this->_getImageMock(BASE_PATH . 'uploads/2012-06-06-wegmeister-91792.png', false, false)
);
// Invokes the function
$image = $this->_userImageManager->render('wegmeister');
}
// The method to be tested
public function render($username, $width = false, $height = false) {
$user = $this->_userMapper->getUserByUsername($username);
if($user !== false && trim($user->getImage()) !== '') {
$srcImage = $this->_folderUserImages . $user->getImage();
}
else {
$srcImage = $this->_placeholderUserImage;
}
$dstImage = $this->_image->render($srcImage, 'jpg', $width, $height);
if ($dstImage === false || empty($dstImage)) {
throw new UnexpectedValueException('ImageRenderingFailed');
}
return $dstImage;
}
【问题讨论】:
标签: php oop unit-testing mocking phpunit