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

131
Vistas
PHPUnit 6.1.x arroja un error array_merge() cuando mi clase de prueba usa su propio método constructor

me sale este error:

 1) XTest::testX array_merge(): Argument #1 is not an array ERRORS! Tests: 1, Assertions: 0, Errors: 1.

En este caso de prueba:

 use PHPUnit\Framework\TestCase; class XTest extends TestCase { function __construct() {} function testX() { $this->assertTrue(true); } }

Si elimino el método __construct , mis pruebas pasan. ¿Qué está pasando con el manejo de PHPUnit de mis métodos constructores de clases? Funcionó bien en PHPUnit versión 4.8, pero ahora estoy usando PHPUnit versión 6.1.3

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

PHPUnit usa el constructor para inicializar el TestCase base

Puede ver el método constructor aquí: https://github.com/sebastianbergmann/phpunit/blob/6.1.3/src/Framework/TestCase.php#L328

 public function __construct($name = null, array $data = [], $dataName = '')

No debe usar el constructor, porque lo usa phpunit y cualquier cambio en la firma, etc. puede romper las cosas.

Puede usar los métodos especiales setUp y setUpBeforeClass que phpunit llamará por usted.

 use PHPUnit\Framework\TestCase; class XTest extends TestCase { function static setUpBeforeClass() { // Called once just like normal constructor // You can create database connections here etc } function setUp() { //Initialize the test case //Called for every defined test } function testX() { $this->assertTrue(true); } // Clean up the test case, called for every defined test public function tearDown() { } // Clean up the whole test class public static function tearDownAfterClass() { } }

Los documentos: https://phpunit.de/manual/current/en/fixtures.html

Tenga en cuenta que se llama al setUp para cada prueba especificada en la clase.

Para una única inicialización, puede usar setUpBeforeClass .

Y otro consejo: ejecute su phpunit con el indicador -v para mostrar los rastros de la pila;)

over 4 years ago · Santiago Trujillo Denunciar

0

Como señaló correctamente la respuesta de Sander Visser, el constructor principal puede tener parámetros adicionales, etc., y generalmente querrá usar setUpBeforeClass o setUp , pero, si sabe lo que está haciendo, puede llamar a parent::__construct(); en el constructor de tu clase Test:

 public function __construct() { parent::__construct(); // Your construct here }

Editar 2019

En Codeception, esto también puede deberse a una sangría YML no válida en el archivo de su suite.

over 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