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

1.2K
Views
Primavera (@SpyBean) contra Mockito(@Spy)

¿Cuál es la diferencia entre @SpyBean de org.springframework.boot.test.mock.mockito.SpyBean y @Spy de org.mockito.Spy ?

Usar @SpyBean en lugar de @Spy hace que mis pruebas fallen.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

@Spy dice :

Un campo anotado con @Spy se puede inicializar explícitamente en el punto de declaración. Alternativamente, si no proporciona la instancia, Mockito intentará encontrar un constructor de argumento cero (incluso privado) y crear una instancia para usted.

El doctor @SpyBean dice:

Anotación que se puede usar para aplicar espías de Mockito a un Spring ApplicationContext.

Todos los beans en el contexto del mismo tipo se envolverán con el espía. Si no se define ningún bean existente, se agregará uno nuevo.

Entonces, la principal diferencia es que @SpyBean es una anotación específica de Spring Boot, pero @Spy es parte de Mockito. @SpyBean y @Spy básicamente hacen lo mismo, pero @SpyBean puede resolver las dependencias específicas de Spring, por ejemplo, @Autowired , @Spy solo puede crear objetos con un constructor vacío.

over 4 years ago · Santiago Trujillo Report

0

Algo que noté durante las pruebas es que SpyBean puede dar como resultado que ciertos valores se transfieran entre pruebas, mientras que Spy siempre comienza desde cero. En mi caso, tenía @SpyBean configurado en una clase que inicialmente tenía componentes autocableados. Pero después de refactorizar la clase para eliminarlas, no cambié las clases de prueba y tuve una falla inesperada.

 Class1 { boolean boo; myMethodA() { if (something) { boo=true; } } myMethodB() { if (boo) { doThis(); } else { doThat(); } } }

Tanto Test1 como Test2 utilizaron @SpyBean Class1. Tanto Test1 como Test2 se ejecutaron correctamente de forma aislada, pero cuando se ejecutan como una suite, Test2 fallaría si se ejecutara después de Test1.

Test1 estableció un valor booleano en Class1 en verdadero, que seguía siendo verdadero cuando se ejecutó Test2. Esto hizo que Test2 fallara porque esperaba que el valor booleano fuera falso. Cambiar a @Spy Class1 resultó en que el booleano se restableciera a falso y ambas pruebas pasaran.

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!