Teste de unidade Spring Boot no Docker e nuvem Yandex

Olá.





Meu nome é Evgeny Frolikov, sou desenvolvedor na AlfaStrakhovanie





No decorrer do trabalho em um projeto na AlfaStrakhovanie, estamos escrevendo um projeto sobre microsserviços e descobriu-se que um dos "microsserviços" cresceu muito (mas ainda está longe do monólito :)). Vivemos tão felizes para sempre, até que começamos a "nos mover" para a nuvem, e então a aventura começou.





A mudança não foi particularmente memorável para a equipe de desenvolvimento, apenas com perguntas do DevOps sobre portas, etc. Observe que eliminamos todos os testes de integração para nos livrar da dependência de outras equipes quando algo cai em seus bancos de teste. Mas "mágica" começou a acontecer nos testes JUnit, ou seja, os testes começaram a falhar. Caíam fantasmas e de maneira imprevisível, por enquanto tratava-se de um pipeline de retraem, até que esse problema se tornou um bloqueador para o cálculo das mudanças.





teste 1 corrida
teste 1 corrida

retraem





teste 2 lançamento
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