PHP 테스트에서 인수 캡처
10544 단어 webdevphptestingbraziliandevs
Um novo dia começa
Seu trabalho era implementar uma simples funcionalidade de cadastro de usuário. Como uma boa programadora, você planeja usar o padrão
Repositório
para poder separar a camada de persistência e mocká-la em testes unitários caso necessário.Classe usuário
Não poderia ser mais simples, certo?
final class User
{
public function __construct(
private string $id,
private string $name)
{
}
public function getId(): string
{
return $this->id;
}
public function getName(): string
{
return $this->name;
}
}
사용 가능한 정보 저장소
당신의 운명은 계속될 것입니다.
final class UserRepository
{
public function save(User $user): void
{
echo sprintf('Persistindo usuário com id %s e nome %s', $user->getId(), $user->getName());
}
}
Classe UserService
아고라 테모스 우마 레비라볼타! Um requisito maluco diz que o campo
id
deve ser randômico. Bom, temos várias maneiras de fazer isso, então vamos prosseguir:final class UserService
{
public function __construct(private UserRepository $repository) { }
public function createNewUser(string $name): void
{
$user = new User(uniqid(), $name);
$this->repository->save($user);
}
}
Legal, tudo está funcionando.
Não vamos nos esquecer dos testes
Nós queremos verificar quando
UserService
크리아 음 User
, se o UserRepostory
está sendo chamado corretamente. 더 이상 중요하지 않은 항목은 지속적으로 문제가 발생하여 저장소 및 저장소에서 기능을 수행할 수 있도록 합니다.public function testFailing(): void
{
$repository = $this->createMock(UserRepository::class);
$userService = new UserService($repository);
$repository
->expects($this->once())
->method('save')
->with(new User('id não randômico', 'user'));
$userService->createNewUser('user');
}
Infelizmente isso não funciona. O teste falha porque
User
com o id id não randômico
UserRepository
que tem um id diferente cada vez que um novo usuário é criado.다시 논쟁의 여지가 있는 캡처라!
No Java, nós temos essa mesa funcionalidade provida pelo Mockito :
Captura de argumento
possibilita a verificação de apenas alguns valores do argumento ao invés de testar a equalidade do objeto inteiro.
Nosso example, nos não nos precisamos testar realmente o valor do
id
porque ele é gerado randomicamente pelo próprio PHP através da função uniqid
.No final o teste usando
captura de argumento
피카 아심public function testRepositoryShouldCreateUserWithCorrectName(): void
{
$repository = $this->createMock(UserRepository::class);
$userService = new UserService($repository);
$repository
->expects($this->once())
->method('save')
->will($this->returnCallback(function($user) {
self::assertEquals('user', $user->getName());
}));
$userService->createNewUser('user');
}
Obrigado por ler até aqui, espero que tenha gostado e boa sorte com seus testes!
Reference
이 문제에 관하여(PHP 테스트에서 인수 캡처), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/portugues/captura-de-argumentos-em-testes-php-281d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)