9 λάθη που πρέπει να αποφύγετε κατά τον προγραμματισμό σε Java
Ποια λάθη πρέπει να αποφεύγονται κατά τον προγραμματισμό σε Java; Στο παρακάτω κομμάτι απαντάμε σε αυτό το ερώτημα.

Μάθετε πώς να εκτελείτε δοκιμές φορμών κοντέινερ στο άρθρο μας σχετικά με τη Java, όπου ο ανώτερος προγραμματιστής μας στη java δείχνει όλη τη μαγεία.
Χρησιμοποιώ Spring Boot στο έργο για να μειώσετε την τυποποίηση. Τα δοχεία δοκιμών είναι ανεξάρτητα από Πλαίσιο Spring και μπορείτε να τα χρησιμοποιήσετε χωρίς αυτό.
Χρησιμοποιώ την έκδοση 1.17.3 του Testcontainers, αλλά μπορείτε να χρησιμοποιήσετε την πιο πρόσφατη. Δοκιμές με δοχείο Postgres.
Πρώτα ορίστε το δοχείο:
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() {
// δεν κάνουμε τίποτα. Αυτό είναι κοινόχρηστο παράδειγμα. Αφήστε την JVM να χειριστεί αυτή τη λειτουργία.
}
}
Στη συνέχεια, αρχικοποιήστε το πλαίσιο της εφαρμογής Spring. Παίρνουμε όλες τις ρυθμίσεις πηγής δεδομένων από την περίπτωση του δοχείου και τις ορίζουμε ως ρυθμίσεις της Spring:
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()
);
}
}
Τέλος, μπορούμε να εκτελέσουμε τη δοκιμή μας και όλα θα ξεκινήσουν κάτω από την κουκούλα:
@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),
}
}
Ή αν θέλουμε να εκτελέσουμε ανεξάρτητο τεστ της Spring, μπορούμε να χρησιμοποιήσουμε απευθείας το container:
@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 είναι πολύ εύχρηστα εργαλεία που μας βοηθούν να δημιουργήσουμε δοκιμές ολοκλήρωσης που χρησιμοποιούν δοχεία Docker. Αυτό μας δίνει μεγαλύτερη ευελιξία και αυξάνει την ταχύτητα ανάπτυξης. Η σωστή ρύθμιση της διαμόρφωσης των δοκιμών μειώνει το χρόνο που απαιτείται για την επιβίβαση νέων προγραμματιστών. Δεν χρειάζεται να ρυθμίσουν όλες τις εξαρτήσεις, απλώς εκτελούν τις γραπτές δοκιμές με επιλεγμένα αρχεία διαμόρφωσης.