Saya ingin menulis beberapa pengujian yang memeriksa konfigurasi XML Spring dari WAR yang diterapkan. Sayangnya beberapa kacang membutuhkan beberapa variabel lingkungan atau properti sistem yang ditetapkan. Bagaimana cara menyetel variabel lingkungan sebelum kacang pegas diinisialisasi saat menggunakan gaya pengujian praktis dengan @ContextConfiguration?
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:whereever/context.xml")
public class TestWarSpringContext { ... }
Jika saya mengonfigurasi konteks aplikasi dengan anotasi, saya tidak melihat kait di mana saya dapat melakukan sesuatu sebelum konteks pegas diinisialisasi.
java
spring
environment-variables
spring-test
Hans-Peter Störr
sumber
sumber
@BeforeClass
metode untuk menyetel properti sistem dan@AfterClass
metode untuk menghapusnya juga akan berfungsi, dan membersihkannya dengan baik setelahnya. (Namun, tidak mencobanya.)Cara yang benar untuk melakukannya, dimulai dengan Spring 4.1, adalah dengan menggunakan
@TestPropertySource
anotasi.@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:whereever/context.xml") @TestPropertySource(properties = {"myproperty = foo"}) public class TestWarSpringContext { ... }
Lihat @TestPropertySource di dokumen Spring dan Javadocs .
sumber
@TestPropertySource(properties={"spring.cloud.config.label=feature/branch"})
Environment
properti, yang berbeda dengan "variabel Lingkungan".Anda juga dapat menggunakan pengujian ApplicationContextInitializer untuk menginisialisasi properti sistem:
public class TestApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> { @Override public void initialize(ConfigurableApplicationContext applicationContext) { System.setProperty("myproperty", "value"); } }
dan kemudian konfigurasikan di kelas pengujian selain lokasi file konfigurasi konteks musim semi:
@ContextConfiguration(initializers = TestApplicationContextInitializer.class, locations = "classpath:whereever/context.xml", ...) @RunWith(SpringJUnit4ClassRunner.class) public class SomeTest { ... }
Duplikasi kode dengan cara ini dapat dihindari jika properti sistem tertentu harus disetel untuk semua pengujian unit.
sumber
@SpringBootTest
atau salah satu anotasi pemotongan uji )Semua jawaban di sini saat ini hanya berbicara tentang properti sistem yang berbeda dari variabel lingkungan yang lebih kompleks untuk ditetapkan, esp. untuk ujian. Untungnya, kelas di bawah ini dapat digunakan untuk itu dan dokumen kelas memiliki contoh yang bagus
EnvironmentVariables.html
Contoh singkat dari dokumen, dimodifikasi untuk bekerja dengan @SpringBootTest
@SpringBootTest public class EnvironmentVariablesTest { @ClassRule public final EnvironmentVariables environmentVariables = new EnvironmentVariables().set("name", "value"); @Test public void test() { assertEquals("value", System.getenv("name")); } }
sumber
Jika Anda ingin variabel Anda valid untuk semua pengujian, Anda dapat memiliki
application.properties
file di direktori sumber daya pengujian (secara default :)src/test/resources
yang akan terlihat seperti ini:Ini kemudian akan dimuat dan digunakan kecuali Anda memiliki definisi melalui
@TestPropertySource
atau metode serupa - urutan persis di mana properti dimuat dapat ditemukan di dokumentasi Spring bab 24. Konfigurasi Eksternal .sumber
Anda dapat mengatur properti Sistem sebagai argumen VM.
Jika project Anda adalah project maven, Anda dapat menjalankan perintah berikut saat menjalankan kelas pengujian:
mvn test -Dapp.url="https://stackoverflow.com"
Kelas tes:
public class AppTest { @Test public void testUrl() { System.out.println(System.getProperty("app.url")); } }
Jika Anda ingin menjalankan kelas atau metode pengujian individu dalam gerhana maka:
1) Buka Jalankan -> Jalankan Konfigurasi
2) Di sisi kiri pilih kelas Tes Anda di bawah bagian Junit.
3) lakukan hal berikut:
sumber
Untuk Pengujian Unit, variabel Sistem belum dibuat saat saya melakukan "mvn clean install" karena tidak ada server yang menjalankan aplikasi. Jadi untuk mengatur properti Sistem, saya perlu melakukannya di pom.xml. Seperti:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.21.0</version> <configuration> <systemPropertyVariables> <propertyName>propertyValue</propertyName> <MY_ENV_VAR>newValue</MY_ENV_VAR> <ENV_TARGET>olqa</ENV_TARGET> <buildDirectory>${project.build.directory}</buildDirectory> </systemPropertyVariables> </configuration> </plugin>
sumber