我创建了
namespace factories;
use Upload\File;
use Upload\Storage\FileSystem;
class FileFactory
{
private $fileSystem;
public function __construct(FileSystem $fileSystem)
{
$this->fileSystem = $fileSystem;
}
public function create()
{
return new File('file', $this->fileSystem);
}
}
文件对象来自此https://packagist.org/packages/codeguy/upload库。
我想测试使用File的代码,并希望模拟getMimeType。
让我们说我想测试我的函数在这段代码中抛出异常:
$file = $this->fileFactory->create();
$mimeType = $file->getMimetype();
if (!in_array($mimeType, ['image/png', 'image/jpeg', 'image/jpg'])) {
throw new ValidationException('File type is not supported. Use png, jpg.');
}
所以我会模拟fileFactory,它重新模拟了File。
它会起作用。但这样好吗?我的同事认为使用这些工厂时有太多的抽象。
另一种选择是只在$ _FILES数组中设置数据,而不是模拟File对象。使用新关键字创建它。
哪个更好?