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.
retraem
" " .
( ) . ( , c Sonar).
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class ContractStatusServiceTest {
@Autowired
private ContractStatusService contractStatusService;
@MockBean
private RsaInfoComponent rsaInfoComponent;
@MockBean
private ContractRepository contractRepository;
""
@RunWith(SpringJUnit4ClassRunner.class) - Spring
@SpringBootTest - Spring Boot (, @SpringBootApplication) Spring. SpringBootTest
@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;
"".
:
( )
: