Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

234
Views
Métodos de rasgo burlón con burla

tengo un rasgo:

 trait A { function foo() { ... } }

y una clase que usa el rasgo así:

 class B { use A { foo as traitFoo; } function foo() { $intermediate = $this->traitFoo(); ... } }

Quiero probar el método foo() de la clase y quiero burlarme (con Mockery) del comportamiento del método foo() del rasgo. Intenté usar un traitFoo() parcial y burlón como:

 $mock = Mockery::mock(new B()); $mock->shouldReceive('traitFoo')->andReturn($intermediate);

Pero no funciona.

¿Es posible hacer esto? ¿Hay una forma alternativa? Quiero probar B::foo() aislándolo de la implementación foo() del rasgo.

Gracias por adelantado.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

El simulacro de proxy que está utilizando hace llamadas desde fuera del simulacro, por lo que las llamadas internas dentro de la clase $this->... no se pueden simular.

Si no tiene métodos finales, aún puede usar un simulacro parcial normal o un simulacro parcial pasivo, que amplía la clase simulada y no tiene tales limitaciones:

 $mock = Mockery::mock(B::class)->makePartial(); $mock->shouldReceive('traitFoo')->andReturn($intermediate); $mock->foo();

ACTUALIZAR:

El ejemplo completo con funciones de rasgos no simuladas:

 use Mockery as m; trait A { function foo() { return 'a'; } function bar() { return 'd'; } } class B { use A { foo as traitFoo; bar as traitBar; } function foo() { $intermediate = $this->traitFoo(); return "b$intermediate" . $this->traitBar(); } } class BTest extends \PHPUnit_Framework_TestCase { public function testMe() { $mock = m::mock(B::class)->makePartial(); $mock->shouldReceive('traitFoo')->andReturn('c'); $this->assertEquals('bcd', $mock->foo()); } }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!