【发布时间】:2020-09-06 17:12:58
【问题描述】:
您好,我的测试有问题。 我正在尝试测试通过 UserDto 数据创建 UserObject 的 UserFactory。 我不知道如何测试它,因为工厂在依赖项中需要 PasswordEncoder。
use App\Entity\User;
use App\Service\Factory\UserFactory;
use PHPUnit\Framework\MockObject\MockObject as MockObject;
use PHPUnit\Framework\TestCase;
class UserFactoryTest extends TestCase
{
/**
* @covers UserFactory
*/
public function testShouldCreateUserObjectFromUserDto()
{
//Given
/**
* @var UserDto | MockObject
*/
$userDto = $this->getMockBuilder(UserDto::class);
//When
$userFactory = new UserFactory(/* PASSWORD ENCODER */);
$user = $userFactory->create($userDto);
//Then
$this->assertInstanceOf(User::class, $user);
}
}
namespace App\Service\Factory;
use App\Entity\User;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
class UserFactory
{
/**
* @var UserPasswordEncoderInterface
*/
private $encoder;
public function __construct(UserPasswordEncoderInterface $encoder)
{
$this->encoder = $encoder;
}
public function create(UserDto $dto)
{
$user = new User();
$user->setPassword($this->encoder->encodePassword($dto->plainPassword));
/**
* CODE..
*/
return $user;
}
}
这是对的吗?我如何测试这个有依赖关系的工厂? 我不能在我的 TestClass 中使用 __construct
【问题讨论】:
-
如果您想知道,用户编码器的第一个参数必须是 User 的实例。编码器只使用它来获取用户类,所以它实际上是什么并不重要。使用这种方法可能会更干净:stackoverflow.com/questions/62980930/…,但结果是一样的。
标签: php symfony phpunit factory