在通过模拟定义期望时,PHPUnit 将测试标记为有风险
PHPUnit marking test as risky when defining expectations on passed mock
我正在尝试对在数据提供程序中创建并传递给我的测试方法的模拟对象设置测试期望。这很有用,因为我可以在不同的测试用例中重用我的数据提供者,并让测试定义模拟中的预期内容。但是,phpunit 在案例通过时将此测试标记为有风险,但在未通过时正确地使测试失败。这是一个已知的事情,不能做吗?
我正在使用 phpunit v9.3
这里是一个人为的例子来说明问题:
<?php
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
class Test extends TestCase
{
public function provideMock(): array
{
return [
[$this->createMock(\DateTime::class)],
];
}
/** @dataProvider provideMock */
public function testMockPasses(MockObject $mock): void
{
$mock->expects($this->once())->method('format')->with('Y-m-d');
$mock->format('Y-m-d');
}
/** @dataProvider provideMock */
public function testMockFails(MockObject $mock): void
{
$mock->expects($this->once())->method('format')->with('Y-m-d');
$mock->format('Y-m-');
}
}
我希望它能正常工作,因为我只是将对象传递给方法 - 所有内部 php 东西。
使用 --verbose
键尝试 运行 PHPUnit - 它可能会详细说明将测试标记为有风险的原因。
我正在尝试对在数据提供程序中创建并传递给我的测试方法的模拟对象设置测试期望。这很有用,因为我可以在不同的测试用例中重用我的数据提供者,并让测试定义模拟中的预期内容。但是,phpunit 在案例通过时将此测试标记为有风险,但在未通过时正确地使测试失败。这是一个已知的事情,不能做吗?
我正在使用 phpunit v9.3
这里是一个人为的例子来说明问题:
<?php
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
class Test extends TestCase
{
public function provideMock(): array
{
return [
[$this->createMock(\DateTime::class)],
];
}
/** @dataProvider provideMock */
public function testMockPasses(MockObject $mock): void
{
$mock->expects($this->once())->method('format')->with('Y-m-d');
$mock->format('Y-m-d');
}
/** @dataProvider provideMock */
public function testMockFails(MockObject $mock): void
{
$mock->expects($this->once())->method('format')->with('Y-m-d');
$mock->format('Y-m-');
}
}
我希望它能正常工作,因为我只是将对象传递给方法 - 所有内部 php 东西。
使用 --verbose
键尝试 运行 PHPUnit - 它可能会详细说明将测试标记为有风险的原因。