class Relay
{
private $privateProperty;
public function __construct()
{
$this->privateProperty = new \stdClass();
}
// метод, который работает с приватным свойством
public function call()
{
return $this->privateProperty;
}
}
use PHPUnit\Framework\TestCase;
class RelayTest extends TestCase
{
public function testCall(): void
{
$reflectionClass = new \ReflectionClass(Relay::class);
$reflectionProperty = $reflectionClass->getProperty('privateProperty');
$reflectionProperty->setAccessible(true);
// создаем наш объект БЕЗ конструктора
$relay = $reflectionClass->newInstanceWithoutConstructor();
// Меняем свойство и вызываем метод, работающий с этим приватным полем
$reflectionProperty->setValue($relay, 1111);
self::assertEquals(1111, $relay->call());
// Меняем свойство и вызываем метод, работающий с этим приватным полем
$reflectionProperty->setValue($relay, 'aaaa');
self::assertEquals('aaaa', $relay->call());
}
}
class RelayTest extends TestCase
public function testCall(): void
{
/** @var Example $stub */
$stub = Stub::make(Relay::class, [
'privateProperty' => 1111,
]);
self::assertEquals(1111, $stub->call());
$stub = Stub::make(Relay::class, [
'privateProperty' => 'aaaa',
]);
self::assertEquals('aaaa', $stub->call());
}
}
$this->anyMock
->expects($this->exactly(4))
->method('doSomething')
->withConsecutive(...$args)
->willReturnOnConsecutiveCalls(...$results)
expects($this->exactly(N))
// Arrange
$provider = $this
->getMockBuilder(UserProvider::class)
->setMethodsExcept(['delete']) // перечисленные тут методы будут настоящими, хоть и мок
->setConstructorArgs([]) // сюда зависимости конструктора передать
->getMock();
$provider = $provider
->expects($this->once())
->method('canDelete') // мокаем приватный метод
->willReturn(true);
// Action
$result = $provider->delete();
// Assert
$this->assertEquals(true, $result);
/**
* @dataProvider providerTypesOfArraysElements
*/
public function testTypeInArray($type)
{
$typesCorrect = ['integer', 'double'];
$this->assertContains($type, $typesCorrect);
}
public function providerTypesOfArraysElements()
{
$arr = [28, 1, 7.3];
return array_map(function($val) {
return [gettype($val)];
}, $arr);
}
In addition, you may create a.env.testing
file in the root of your project. This file will override the.env
file's variables when running PHPUnit tests or executing Artisan commands with the--env=testing
switch.