Urutan tidak disetel ulang untuk db HSQL tiruan dan menyebabkan pelanggaran batasan antara pengujian JBehave

Saya mengalami masalah pengurutan saat menulis tes BDD dengan API kami (Spring+Hibernate). Kami menggunakan JBehave sebagai pelari BDD dan db HSQL.

Pada dasarnya saya telah membuat kasus berikut untuk menjelaskan masalah yang saya temui.

Saya punya dua cerita. Kedua cerita tersebut disisipkan ke tabel bernama DUMMYPRODUK. Kami menetapkan bahwa sebelum setiap skenario kami menghapus semua data dan mengatur ulang skema menggunakan yang berikut ini,

"POTONG IDENTITAS PUBLIK RESTART SCHEMA DAN TANPA PERIKSA"

Dan kemudian kami menginisialisasi ulang Data Tabel menggunakan skrip sql yang telah ditentukan sebelumnya yang mencakup 2 sisipan ke DUMMYproduct,

Dan Mereset urutan (seharusnya) menggunakan

HAPUS URUTAN DUMMYproduct_SEQ; BUAT URUTAN DUMMYPRODUK_SEQ MULAI DENGAN 3 PENINGKATAN 10;

Tapi saya menghadapi perilaku yang sangat aneh karena urutan antara cerita dan skenario tidak diatur ulang. Sebaliknya mereka tampaknya melanjutkan ke cerita/skenario berikutnya dan kemudian mengatur ulang di dalamnya, yaitu. tidak masuk ke blok urutan berikutnya, menyebabkan terjadinya pelanggaran batasan.

pengecualian=java.sql.SQLIntegrityConstraintViolationException: pelanggaran batasan integritas: batasan unik atau pelanggaran indeks; Tabel SYS_PK_10216: DUMMYPRODUK

Perilaku yang dialami dimasukkan ke dalam DUMMYPRODUK untuk DUMMYPRODUKID

(DUMMYPRODUKID)
Cerita pertama
Skenario
3
4

cerita berikutnya
Skenario
5
6< br/> 7
8
9
10
11
12
3
4
5 pengecualian
7 pengecualian
9 pengecualian
Skenario
11
12
3
4
5
6
7
8
9
10
11 pengecualian
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Skenario
27
28
29
30
31
32
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 pengecualian< br/> 29 pengecualian

Pernahkah Anda mengalami masalah seperti itu di masa lalu dengan implementasi HSQL Anda?


person TheMayne    schedule 17.02.2014    source sumber
comment
Saya menemukan tautan ini yang merupakan masalah sebelumnya dan telah diperbaiki, tetapi tampaknya itulah yang saya hadapi. marc.info/?l=hsqldb-user&m=130856349508646   -  person TheMayne    schedule 17.02.2014
comment
groups.google.com/forum/#!topic/h2-database/ z7HmvPmvjV8 Truncate tidak mengatur ulang urutan   -  person TheMayne    schedule 17.02.2014


Jawaban (2)


Pernyataan tersebut memulai ulang urutan IDENTITAS yang dideklarasikan di dalam tabel:

TRUNCATE TABLE T RESTART IDENTITY AND COMMIT NO CHECK

Pernyataan ini melakukan hal di atas untuk semua tabel dalam skema, serta menyetel ulang urutan yang ada di luar tabel:

TRUNCATE SCHEMA PUBLIC RESTART IDENTITY AND COMMIT NO CHECK

Pernyataan untuk menghapus urutan akan menghapusnya secara permanen. Tidak ada jejak yang tersisa saat Anda membuatnya lagi.

Semua hal di atas dapat diuji dengan HSQLDB 2.3.X terbaru. Mungkin saja Anda menggunakan versi yang lebih lama, atau mungkin salah satu pernyataan Anda tidak benar-benar dijalankan. Catatan, Anda harus menghapus urutan dengan satu pernyataan dan membuatnya lagi dengan pernyataan lain.

person fredt    schedule 17.02.2014
comment
Untuk mengonfirmasi saya menggunakan 2.3.2 - person TheMayne; 17.02.2014
comment
Jika saya menghapus skema, inisialisasi ulang konteks pegas (yang memuat semua entitas hibernasi dan menyiapkan hsqldb) Urutannya disetel ulang. Namun ini bukanlah solusi yang menguntungkan - person TheMayne; 17.02.2014
comment
Saya menguji di atas dengan urutan Anda di Database Manager sebelum saya menjawab. Tampaknya Anda menggunakan 2 database berbeda atau pernyataan tidak dijalankan. - person fredt; 17.02.2014
comment
Masalahnya terletak pada threading dan pembongkaran dengan pengaturan JBehave kami sejauh yang saya bisa lihat. Urutannya tidak dihilangkan dan dibuat ulang ketika thread berikutnya mulai dieksekusi - person TheMayne; 17.02.2014
comment
mail-archive.com/[email protected]/ msg00837.html Ini lebih mendekati kebutuhan saya. - person TheMayne; 18.02.2014

Setelah menjalankan db sebagai instance terpisah dan mengubah ke H2db kami menemukan sumber masalah kami. DB tidak suka urutan dihilangkan dan dibuat ulang atau bahkan diubah pada setiap skenario yang dijalankan. Kami memisahkan skrip kami menjadi skrip penyisipan data dan skrip pengubah urutan. Data dibersihkan menggunakan dbunit dan ini diikuti dengan skrip penyisipan pada setiap proses. Urutannya hanya diubah saat startup dan cerita bdd bertambah secara berurutan seperti yang diharapkan.

person TheMayne    schedule 01.03.2014