9 klaidos, kurių reikia vengti programuojant "Java" kalba
Kokių klaidų reikėtų vengti programuojant "Java" kalba? Šiame straipsnyje atsakysime į šį klausimą.
Sužinokite, kaip paleisti konteinerių formos testus su "Java" susijusiame straipsnyje, kuriame mūsų vyresnysis "Java" programuotojas parodo visus stebuklus.
Aš naudoju "Spring Boot į projektas kad sumažintumėte šablonų skaičių. Testų konteineriai nepriklauso nuo Pavasario sistema ir galite juos naudoti be to.
Aš naudoju "Testcontainers" 1.17.3 versiją, bet galite naudoti ir naujausią. Testai su "Postgres" konteineriu.
Pirmiausia apibrėžkite konteinerį:
viešoji klasė Postgres13TC extends PostgreSQLContainer {
private static final Postgres13TC TC = new Postgres13TC();
private Postgres13TC() {
super("postgres:13.2");
}
public static Postgres13TC getInstance() {
return TC;
}
@Override
public void start() {
super.start();
System.setProperty("DB_URL", TC.getJdbcUrl());
System.setProperty("DB_USERNAME", TC.getUsername());
System.setProperty("DB_PASSWORD", TC.getPassword());
}
@Override
public void stop() {
// nieko nedaryti. Tai bendrinama instancija. Leiskite JVM atlikti šią operaciją.
}
}
Tada inicializuokite "Spring" taikomosios programos kontekstą. Gauname visus duomenys šaltinio konfigūraciją iš konteinerio egzemplioriaus ir nustatykite ją kaip "Spring" konfigūraciją:
viešoji klasė ContainerInit įgyvendina ApplicationContextInitializer {
public static Postgres13TC postgres13TC;
static {
postgres13TC = Postgres13TC.getInstance();
postgres13TC.start();
}
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
TestPropertySourceUtils.addInlinedPropertiesToEnvironment(
applicationContext,
"spring.datasource.url=" + postgres13TC.getJdbcUrl(),
"spring.datasource.username=" + postgres13TC.getUsername(),
"spring.datasource.password=" + postgres13TC.getPassword(),
"db.host=" + postgres13TC.getHost(),
"db.port=" + postgres13TC.getMappedPort(postgres13TC.POSTGRESQL_PORT),
"db.name=" + postgres13TC.getDatabaseName(),
"db.username=" + postgres13TC.getUsername(),
"db.password=" + postgres13TC.getPassword()
);
}
}
Galiausiai galime paleisti savo testą ir viskas bus paleista po gaubtu:
@SpringBootTest(webEnvironment = RANDOM_PORT)
@AutoConfigureTestDatabase(replace = NONE)
@ContextConfiguration(initializers = ContainerInit.class)
@Testcontainers
klasė DummyRepositoryTest {
@Autowired
private DummyRepository dummyRepository;
@Test
void shouldReturnDummy() {
var byId = dummyRepository.getById(10L);
var expected = new Dummy();
expected.setId(10L);
assertThat(byId).completes().emitsCount(1).emits(expected);
}
}
Arba, jei norime atlikti nepriklausomą nuo "Spring" testą, galime tiesiogiai naudoti konteinerį:
@Testcontainers
klasė SimpleDbTest {
@Container
private static final Postgres13TC postgres13TC = Postgres13TC.getInstance();
@Test
void testConnection() {
assumeThat(postgres13TC.isRunning());
var connectionProps = new Properties();
connectionProps.put("user", postgres13TC.getUsername());
connectionProps.put("password", postgres13TC.getPassword());
bandymas (Connection connection = DriverManager.getConnection(postgres13TC.getJdbcUrl(),
connectionProps)) {
var resultSet = connection.prepareStatement("Select 1").executeQuery();
resultSet.next();
assertThat(resultSet.getInt(1)).isEqualTo(1);
} catch (SQLException sqlException) {
assertThat((Exception) sqlException).doesNotThrowAnyException();
}
}
}
"Testcontainers" yra labai lengvai naudojami įrankiai, kurie padeda mus kurti integracijos testus, kurie naudoja "Docker" konteineriai. Tai suteikia mums daugiau lankstumo ir padidina kūrimo greitį. Tinkamai nustačius bandymų konfigūraciją, sutrumpėja naujų kūrėjų įlaipinimo laikas. Jiems nereikia nustatyti visų priklausomybių, tereikia paleisti parašytus testus su pasirinktais konfigūracijos failais.
