gutsout11
Новичок
Возник спор, можно ли(всмысле не является ли это плохой практикой) использовать дата провайдеры в функциональных тестах с участием БД, как здесь:
Или данные в базу должны заноситься только фикстурами. Или данные должны создаваться (
) в самом тесте.
Вообще было бы хорошо услышать кто как пишет тесты с реальными данными в БД, увидеть примеры. В сети, по конкретно этой теме, инфы очень мало, а развёрнутых примеров тем более. Буду благодарен за любую инфу
PHP:
class OrdersReportTest extends \PHPUnit\Framework\TestCase {
/**
* @dataProvider reportDataProvider
*/
public function testReport(DateTimeImmutable $reportDate, array $orders, string $expectedResult): void
{
foreach ($orders as $order) {
$this->entityManager->persist($order);
}
$this->entityManager->flush();
$result = $this->reportService->getOrdersAmountOnDate($reportDate);
$this->assertEquals($expectedResult, $result);
}
public static function reportDataProvider(): array
{
return [
[
'reportDate' => new DateTimeImmutable('2019-11-30'),
'orders' => [
new Order(/*amount: */'100', new DateTimeImmutable('2019-11-30')),
new Order('10.7', new DateTimeImmutable('2019-11-30')),
new Order('30', new DateTimeImmutable('2019-11-29'))
],
'expectedResult' => '110.7'
],
[
'reportDate' => new DateTimeImmutable('2019-11-30'),
'orders' => [],
'expectedResult' => '0'
],
];
}
}
Код:
new Order('100', new DateTimeImmutable('2019-11-30'))...
Вообще было бы хорошо услышать кто как пишет тесты с реальными данными в БД, увидеть примеры. В сети, по конкретно этой теме, инфы очень мало, а развёрнутых примеров тем более. Буду благодарен за любую инфу
Последнее редактирование модератором: