Test unitaire de Spring Boot dans Docker et Yandex cloud

Bonjour.





Je m'appelle Evgeny Frolikov, je suis développeur chez AlfaStrakhovanie





En cours de travail sur un projet chez AlfaStrakhovanie, nous écrivons un projet sur les micro services et il s'est avéré que l'un des "micro services" a beaucoup grandi (mais il est encore loin du monolithe :)). Nous avons vécu si heureux pour toujours, jusqu'à ce que nous ayons commencé à «passer» au cloud, puis l'aventure a commencé.





Cette décision n'a pas été particulièrement mémorable pour l'équipe de développement, uniquement avec les questions de DevOps sur les ports, etc. Notez que nous supprimons tous les tests d'intégration afin de se débarrasser de la dépendance aux autres équipes lorsque quelque chose tombe sur leurs bancs de test. Mais la «magie» a commencé à se produire dans les tests JUnit, à savoir les tests ont commencé à échouer. Ils sont tombés fantômes et imprévisibles, pour le moment, ils ont été traités avec un pipeline de recyclage, jusqu'à ce que ce problème devienne un bloqueur pour le calcul des changements.





test 1 exécution
test 1 exécution

retraem





lancement du test 2
2

" " .





( ) . ( , c Sonar).





@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class ContractStatusServiceTest {
    @Autowired
    private ContractStatusService contractStatusService;
    @MockBean
    private RsaInfoComponent rsaInfoComponent;
    @MockBean
    private ContractRepository contractRepository;
      
      



""





  1. @RunWith(SpringJUnit4ClassRunner.class) - Spring





  2. @SpringBootTest - Spring Boot (, @SpringBootApplication) Spring. SpringBootTest





  3. @Autowired - Bean;





@Autowired , .





.





@RunWith(SpringRunner.class)
@SpringBootTest
@RequiredArgsConstructor
public class  ComponentTestTest {

   // @Autowired
    private final ComponentTest componentTest;
    

      
      



,





1)@RequiredArgsConstructor - Lombok final.





.....





java.lang.Exception: Test class should have exactly one public zero-argument constructor

	at org.junit.runners.BlockJUnit4ClassRunner.validateZeroArgConstructor(BlockJUnit4ClassRunner.java:171)
	at org.junit.runners.BlockJUnit4ClassRunner.validateConstructor(BlockJUnit4ClassRunner.java:148)
	at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:127)
	...

      
      



.





, Mock





@RunWith(MockitoJUnitRunner.class)
public class CrossProductServiceTest {
    @InjectMocks
    private CrossProductService crossProductService;
    @Mock
    private KaskoService kaskoService;
    @Mock
    private CrownVirusOfferService crownVirusOfferService;
      
      







  1. @RunWith(MockitoJUnitRunner.class) - Bean , ( )





  2. @Mock -





  3. @InjectMocks - Bean





"".





:





  1. ( )









:
















All Articles