Unit-Test Spring Boot in der Docker- und Yandex-Cloud

Hallo.





Mein Name ist Evgeny Frolikov, ich bin Entwickler bei AlfaStrakhovanie





Während der Arbeit an einem Projekt bei AlfaStrakhovanie schreiben wir ein Projekt über Mikrodienste und es stellte sich heraus, dass einer der "Mikrodienste" stark gewachsen ist (aber noch weit vom Monolithen entfernt ist :)). Wir lebten so glücklich, bis wir anfingen, uns in die Wolke zu "bewegen", und dann begann das Abenteuer.





Der Umzug war für das Entwicklungsteam nicht besonders denkwürdig, nur mit Fragen von DevOps zu Ports usw. Beachten Sie, dass wir alle Integrationstests ausschneiden, um die Abhängigkeit von anderen Teams zu beseitigen, wenn etwas auf ihre Testbänke fällt. Aber "Magie" begann in JUnit-Tests zu passieren, nämlich Tests scheiterten. Sie fielen phantomartig und unvorhersehbar, vorerst wurde es mit einer Retraem-Pipeline behandelt, bis dieses Problem zu einem Blocker für die Berechnung von Änderungen wurde.





Test 1 Lauf
Test 1 Lauf

retraem





Test 2 starten
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