Spring-boot menggunakan profil Spring ( http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html ) yang memungkinkan misalnya untuk memiliki konfigurasi terpisah untuk lingkungan yang berbeda. Salah satu cara saya menggunakan fitur ini adalah dengan mengkonfigurasi database pengujian yang akan digunakan oleh pengujian integrasi. Namun saya bertanya-tanya apakah perlu membuat 'tes' profil saya sendiri dan secara eksplisit mengaktifkan profil ini di setiap file pengujian? Sekarang saya melakukannya dengan cara berikut:
- Buat application-test.properties di dalam src / main / resources
- Tuliskan konfigurasi khusus pengujian di sana (hanya nama database untuk saat ini)
Di setiap file pengujian meliputi:
@ActiveProfiles("test")
Apakah ada cara yang lebih cerdas / lebih ringkas? Misalnya profil uji default?
Sunting 1: Pertanyaan ini berkaitan dengan Spring-Boot 1.4.1
sumber
Cara lain untuk melakukannya adalah dengan menentukan kelas pengujian dasar (abstrak) yang akan diperluas oleh kelas pengujian Anda yang sebenarnya:
@RunWith(SpringRunner.class) @SpringBootTest() @ActiveProfiles("staging") public abstract class BaseIntegrationTest { }
Uji beton:
public class SampleSearchServiceTest extends BaseIntegrationTest{ @Inject private SampleSearchService service; @Test public void shouldInjectService(){ assertThat(this.service).isNotNull(); } }
Ini memungkinkan Anda mengekstrak lebih dari sekadar
@ActiveProfiles
anotasi. Anda juga dapat membayangkan kelas dasar yang lebih terspesialisasi untuk berbagai jenis pengujian integrasi, misalnya lapisan akses data vs lapisan layanan, atau untuk spesialisasi fungsional (umum@Before
atau@After
metode, dll).sumber
Anda bisa meletakkan file application.properties di folder test / resources Anda. Di sana Anda mengatur
Ini adalah jenis profil pengujian default saat menjalankan pengujian.
sumber
src/test/resources/application.properties
file,src/main/resources/application.properties
konten diabaikan saat menjalankan pengujian.application-test.properties
untuk pengujian dan mengganti hanya properti yang Anda butuhkan.spring.profiles.active=test
seperti jawaban yang dikatakan.Cara delaratif untuk melakukan itu (Faktanya, sedikit perubahan pada jawaban asli @ Compito):
spring.profiles.active=test
ditest/resources/application-default.properties
.test/resources/application-test.properties
untuk pengujian dan timpa hanya properti yang Anda butuhkan.sumber
application.properties
di classpath diurai juga, lalutest/resources/application-default.properties
kemudian, karena profil "test" terdeteksi, makatest/resources/application-test.properties
diurai? Jika tidak, itu tidak akan menyelesaikan masalah @ ciastek seperti yang dikomentari dalam jawaban @ Compito .Jika Anda menggunakan maven, Anda dapat menambahkan ini di pom.xml:
Kemudian, maven harus menjalankan pengujian integrasi Anda (* IT.java) menggunakan arugument ini, dan IntelliJ juga akan mulai dengan profil ini diaktifkan - sehingga Anda dapat menentukan semua properti di dalamnya
dan Anda tidak perlu properti "-default".
sumber
Dalam kasus saya, saya memiliki application.properties yang berbeda tergantung pada lingkungan, seperti:
dan application.properties berisi properti spring.profiles.active untuk memilih file yang tepat.
Untuk tes integrasi saya, saya membuat
application-test.properties
file baru di dalamtest/resources
dan dengan@TestPropertySource({ "/application-test.properties" })
penjelasan ini adalah file yang bertanggung jawab untuk memilih aplikasi. Properti yang saya inginkan tergantung pada kebutuhan saya untuk tes tersebutsumber
@ActiveProfiles
, bukan@TestPropertySource
.Untuk mengaktifkan profil "test", tulis di build.gradle Anda:
test.doFirst { systemProperty 'spring.profiles.active', 'test' activeProfiles = 'test' }
sumber
Cara lain secara terprogram untuk melakukan itu:
import static org.springframework.core.env.AbstractEnvironment.DEFAULT_PROFILES_PROPERTY_NAME; @BeforeClass public static void setupTest() { System.setProperty(DEFAULT_PROFILES_PROPERTY_NAME, "test"); }
Ini bekerja dengan baik.
sumber
Anda dapat memasukkan properti khusus pengujian Anda
src/test/resources/config/application.properties
.Properti yang ditentukan dalam file ini akan menggantikan properti yang ditentukan di
src/main/resources/application.properties
selama pengujian.Untuk informasi lebih lanjut tentang mengapa ini berhasil, lihat dokumen Spring Boots .
sumber
Jika Anda hanya ingin menyetel / menggunakan profil default pada saat membuat build melalui maven, teruskan argumen
-Dspring.profiles.active=test
Just likesumber
Menambahkan
spring.profiles.active=tests
dalam file application.properties Anda, Anda dapat menambahkan beberapa file properti dalam aplikasi booting musim semi Anda sepertiapplication-stage.properties
,application-prod.properties
, dll Dan Anda dapat menentukan di application.properties Anda berkas sementara berkas untuk merujuk dengan menambahkanspring.profiles.active=stage
atauspring.profiles.active=prod
Anda juga dapat meneruskan profil pada saat menjalankan aplikasi boot musim semi dengan memberikan perintah:
java -jar
-Dspring.profiles.active=local
build/libs/turtle-rnr-0.0.1-SNAPSHOT.jar
Menurut nama profil file properti diambil, dalam kasus di atas profil lewat
local
pertimbangkanapplication-local.properties
file tersebutsumber