9 villur sem ber að forðast við forritun í Java
Hvaða villur ætti að forðast við forritun í Java? Í eftirfarandi kafla svörum við þessari spurningu.
Lærðu hvernig á að keyra ílátaprófanir í Java-tengdu greininni okkar þar sem reyndur Java-þróunaraðili okkar sýnir alla töfrana.
Hér er tómt.Ég nota Vor-Botn í verkefni til að draga úr endurteknum kóða. Prófunarílát eru óháð Spring-ramminn og þú getur notað þau án þess.
Ég nota Testcontainers útgáfu 1.17.3, en endilega notaðu nýjustu útgáfuna. Prófanir með Postgres-íláti.
Fyrst skaltu skilgreina ílát:
public class 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() {
// gera ekkert. Þetta er deilt eintak. Látið JVM sjá um þessa aðgerð.
}
}
Síðan frumstilla Spring-forrits samhengi. Við fáum allt gögn Fá upplýsingar um stillingar úr gámdæmi og stilla þær sem Spring-stillingar:
public class ContainerInit implements 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()
);
}
}
Að lokum getum við keyrt prófið okkar, og allt verður ræst undir vélinni:
@SpringBootTest(webEnvironment = RANDOM_PORT)
@AutoConfigureTestDatabase(replace = NONE)
@ContextConfiguration(initializers = ContainerInit.class)
@Testcontainers
class 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);
}
}
Eða ef við viljum keyra sjálfstæða prófun í Spring, getum við notað gám beint:
@Testcontainers
class 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());
try (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 eru mjög auðveld í notkun verkfæri sem hjálpa okkur að búa til samþættingapróf sem nota Docker ílát. Það gefur okkur meiri sveigjanleika og eykur þróunarhraða. Rétt uppsetning prófunarstillinga dregur úr þeim tíma sem þarf til að taka nýja þróunaraðila inn í teymið. Þeir þurfa ekki að setja upp allar forsendur, heldur eingöngu keyra skrifuðu prófin með valin stillingarskrár.
