symfony 单元测试图像调整大小方法

sz81bmfz  于 2023-11-22  发布在  其他
关注(0)|答案(2)|浏览(138)

我试图在Symfony中使用PHPUnit来测试一个返回调整大小的图像的方法。理想情况下,我可以在image对象中模拟并设置一些大小,然后看看返回时大小是否改变。
代码使用Imagick并解码图像,我想知道这是否意味着我将被迫在服务器上保留测试图像进行单元测试?有没有一种方法可以在代码中模拟图像文件?

$based = base64_decode($content);

    if($based){
        $content = $based;
    }

    $imagick = new \Imagick();

    $imagick->readImageBlob($content);

字符串
如果文件被存储在服务器上用于测试,我如何模拟一个请求对象来包含该文件?

ffx8fchx

ffx8fchx1#

最好的方法是模仿Imagick,然后通过readImage方法添加文件。下面是一个例子:

class MyClass {
  public function __construct(
    private Imagick $imagick = new Imagick()
  )

  public function doSomething(string $filename)
  {
    $this->imagick->readImage($filename);

    # And blabla...
  }
}

字符串
现在测试:

class MyClassTest extends TestCase {

  public function testShouldDoSomething()
  {
    $imagick = $this->createMock(Imagick::class);
    $imagick->method('readImage')->willReturn(true);

    # And blabla...
  }
}

wnvonmuf

wnvonmuf2#

我设法找到了将文件传递给Imagick的正确方法。它需要用base64_encode Package file_get_contents

public function setUp(){
    $imagePath = getcwd()."/src/Woodwork/PartnerBundle/Tests/lin.png";
    $this->image = base64_encode(file_get_contents($imagePath));
    $logger = $this->getMockBuilder('Logger')->setMethods(array('debug', 'info', 'error'))->getMock();
    $this->imagickHelper = new ImagickHelper($logger);
}

字符串

相关问题