コードベースをリファクタリングしているときに、別のクラスに抽出したいコードを見つけました。
ユーザープロフィール写真のサムネイルを提供します。クラス(名前を付けましょう)は、のインスタンスとの UserImageManager
インスタンスを保持します。UserMapper
ImageRenderer
これで、ユーザーのプロフィール写真のキャッシュされたURLを取得する方法があります。User
このメソッドは、からオブジェクトを取得し、オブジェクトに格納されている画像パスを使用してのメソッドを UserMapper
トリガーします。render
ImageRenderer
User
私はこの小さな関数のテストを作成し、をモックアウトしました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;
}