Saya baru menggunakan frameworks (baru saja lulus kelas) dan ini adalah pertama kalinya saya menggunakan Spring Boot.
Saya mencoba menjalankan tes Junit sederhana untuk melihat apakah CrudRepositori saya memang berfungsi.
Kesalahan yang terus saya dapatkan adalah:
Tidak dapat menemukan @SpringBootConfiguration, Anda perlu menggunakan @ContextConfiguration atau @SpringBootTest (kelas = ...) dengan java.lang.IllegalStateException pengujian Anda
Tidak Spring Boot mengkonfigurasi sendiri?
Kelas Tes Saya:
@RunWith(SpringRunner.class)
@DataJpaTest
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class JpaTest {
@Autowired
private AccountRepository repository;
@After
public void clearDb(){
repository.deleteAll();
}
@Test
public void createAccount(){
long id = 12;
Account u = new Account(id,"Tim Viz");
repository.save(u);
assertEquals(repository.findOne(id),u);
}
@Test
public void findAccountByUsername(){
long id = 12;
String username = "Tim Viz";
Account u = new Account(id,username);
repository.save(u);
assertEquals(repository.findByUsername(username),u);
}
Starter aplikasi Spring Boot saya:
@SpringBootApplication
@EnableJpaRepositories(basePackages = {"domain.repositories"})
@ComponentScan(basePackages = {"controllers","domain"})
@EnableWebMvc
@PropertySources(value {@PropertySource("classpath:application.properties")})
@EntityScan(basePackages={"domain"})
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
}
}
Repositori Saya:
public interface AccountRepository extends CrudRepository<Account,Long> {
public Account findByUsername(String username);
}
}
sumber
Application
ada. Jika, bagaimanapun, maksud Andasrc/main
dansrc/test
, maka folder itu bukan bagian dari paket hirarki. Mungkin Anda lebih baik memperbarui pertanyaan Anda dengan tangkapan layar atau penjelasan seperti apa struktur proyek Anda.Konfigurasi dilampirkan ke kelas aplikasi, jadi yang berikut ini akan mengatur semuanya dengan benar:
Contoh dari proyek JHipster di sini .
sumber
Penting untuk memeriksa apakah Anda memiliki nama paket yang dire-refoured dari kelas utama Anda yang dianotasi
@SpringBootApplication
. Dalam hal ini testcase harus dalam paket yang sesuai jika tidak maka akan mencarinya dalam paket yang lebih lama. ini adalah kasus bagi saya.sumber
Selain apa yang dikatakan Thomas Kåsene, Anda juga dapat menambahkan
ke anotasi tes untuk menentukan di mana seharusnya mencari kelas lain jika Anda tidak ingin refactor hierarki file Anda. Inilah yang pesan kesalahan mengisyaratkan dengan mengatakan:
sumber
Dalam kasus saya, paketnya berbeda antara kelas Aplikasi dan Tes
dan
Setelah membuat mereka setuju tes berjalan dengan benar.
sumber
Ini bekerja untuk saya
nama paket dari kelas tes di atas diubah sama dengan nama paket dari kelas normal.
ubah ke ini
sumber
The uji slice disediakan di Spring Boot 1.4 membawa fitur uji kemampuan berorientasi.
Sebagai contoh,
@JsonTest menyediakan lingkungan Jackson sederhana untuk menguji serialisasi dan deserialisasi json.
@WebMvcTest menyediakan lingkungan web tiruan, ini dapat menentukan kelas controller untuk pengujian dan menyuntikkan MockMvc dalam pengujian.
@ DataJpaTest akan menyiapkan basis data tertanam dan menyediakan lingkungan JPA dasar untuk pengujian.
@RestClientTest menyediakan lingkungan klien REST untuk pengujian, khususnya RestTemplateBuilder dll.
Anotasi ini tidak disusun dengan SpringBootTest, mereka digabungkan dengan serangkaian
AutoconfigureXXX
dan@TypeExcludesFilter
anotasi.Lihatlah
@DataJpaTest
.Anda dapat menambahkan anotasi @AutoconfigureXXX Anda untuk mengabaikan konfigurasi default.
Mari kita lihat masalah Anda,
@DataJpaTest
dan@SpringBootTest
, seperti yang dikatakan di atas@DataJpaTest
akan membangun konfigurasi dengan caranya sendiri (mis. Secara default, itu akan mencoba untuk menyiapkan H2 tertanam sebagai gantinya) dari warisan konfigurasi aplikasi.@DataJpaTest
ditujukan untuk uji slice .@DataJpaTest
, baca entri blog resmi ini dari Spring.io untuk topik ini, (sedikit membosankan).Application
menjadi konfigurasi yang lebih kecil dengan fitur, sepertiWebConfig
,DataJpaConfig
dll. Konfigurasi berfitur lengkap (web campuran, data, keamanan dll) juga menyebabkan tes berbasis uji slice Anda gagal. Periksa sampel uji dalam sampel saya .sumber
Saya pikir solusi terbaik untuk masalah ini adalah menyelaraskan struktur folder tes Anda dengan struktur folder aplikasi.
Saya memiliki masalah yang sama yang disebabkan oleh duplikasi proyek saya dari proyek struktur folder yang berbeda.
jika proyek pengujian Anda dan proyek aplikasi Anda akan memiliki struktur yang sama, Anda tidak akan diharuskan untuk menambahkan anotasi khusus ke kelas pengujian Anda dan semuanya akan berjalan sebagaimana mestinya.
sumber
Ketika semua kelas berada dalam paket yang sama, kelas tes bekerja. Segera setelah saya memindahkan semua kelas java ke paket yang berbeda untuk mempertahankan struktur proyek yang tepat, saya mendapatkan kesalahan yang sama.
Saya menyelesaikannya dengan memberikan nama kelas utama saya di kelas tes seperti di bawah ini.
sumber
Saya memiliki masalah yang sama dan saya menyelesaikannya dengan menambahkan kelas kosong yang dijelaskan
SpringBootApplication
dalam paket root dari folder src / test / javasumber
Dalam kasus saya
Pastikan (
test package
nama ) AndaYourApplicationTests
sama dengan (main package
nama ).sumber
Penjelasan di atas bekerja dengan baik untuk saya. Saya menggunakan spring boot dengan JPA.
sumber