2

What is the difference between createMock, createPartialMock and createConfiguredMock methods of PHPUnit\Framework\TestCase class in Magento 2?

1 Answer 1

3

createMock:

createMock(string $originalClassName)

It uses the getMockBuilder method to create a test double for the specified class. It disables the constructor of the original class (you will almost always want to do that)

createPartialMock:

createPartialMock(string $originalClassName, array $methods)

The createPartialMock method is very similar to createMock but it lets you specify an array with a subset of methods to be mocked (createMock doesn't mock any method by default). This is specially useful in Magento 2 when mocking factories, since you will need the create method of the factory to be mocked.

Example:

$this->priceFactoryMock = $this->createPartialMock(
    \Magento\ProductAlert\Model\PriceFactory::class,
    ['create']
);
$this->priceFactoryMock->expects(
    $this->once()
)->method('create')->willReturn(
    $priceMock
);

createConfiguredMock:

createConfiguredMock(string $originalClassName, array $configuration)

Similar to createMock but accepts a configuration array with a list of methods and their corresponding return values. Internally, it sets the willReturn value for the methods specified. An example use in Magento 2 would be:

$this->resourceConnectionMock = $this->createConfiguredMock(
    ResourceConnection::class,
    [
        'getConnection' => $this->adapterMock,
        'getTableName'  => self::PREFIXED_TABLE_MEDIA_GALLERY_ASSET
    ]
);

Here, besides creating the mock for the Magento\Framework\App\ResourceConnection class, we are also specifying the return values of the getConnection and getTableName methods inside that class. You would obtain the same result if you first create the mock with createMock and then use willReturn like this:

$this->resourceConnectionMock = $this->createMock(ResourceConnection::class);
$this->resourceConnectionMock->method('getConnection')->willReturn($this->adapterMock);
$this->resourceConnectionMock->method('getTableName')->willReturn(self::PREFIXED_TABLE_MEDIA_GALLERY_ASSET);
1
  • Thanks, @Daniel Commented Feb 12, 2023 at 10:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.