Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

229
Vistas
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.

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

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()); } }
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda