Apresentação
Fala pessoal tudo bem !? A ideia deste artigo é ajudar vocês a contribuir mais com testes dentro da empresa
Vamos a seguinte hipótese imagina que te peçam para testar uma classe inchada cheio de classes e um alto acoplamento e claro essa classe não tem as propriedade sendo recebidas por construtor o que vocês
Classe exemplo:
<?php
use ...
class SomeClass
{
private AnotherClass $anotherClass;
public function __construct()
{
$this->anotherClass = new AnotherClass();
//... another calls classes
}
public function someMethod(Type $args): SomeType
{
//... any business logic
$this->anotherClass->doIt();
return $someType;
}
}
Pensam comigo terá um alto acoplamento e se for aceitar que essa classe seja enviada por parâmetro no seu construtor possa ser que quebre compatibilidade com outras classes que podem estar usando.
Imagina que anotherClass::doIt
seja algo arriscado que se for chamado possa ter uma consequência grave por exemplo um update em massa para resolver esse problema você pode sobreescrever essa propriedade no seu test:
<?php
class SomeTest extends TestCase
{
public function testAnywere(): void
{
$anotherClassMock = $this->getMockBuilder(AnotherClass::class)
->disableOriginalConstructor()
->getMock();
$anotherClassMock
->method('doIt');
$someClass = new SomeClass();
$setSomeClassClosure = function () use ($anotherClassMock){
$this->anotherClass = $anotherClassMock;
};
$doSetSomeClassClosure = $setSomeClassClosure
->bindTo($someClass, SomeClass::class);
$doSetSomeClassClosure();
}
}
Obs: A ideia desta forma de testar é te dar poder para conseguir resolver algo legado e bastante arriscado, no geral o ideal seria uma reescrita deste método
Top comments (0)