Beberapa bulan yang lalu, Mentimun JVM 3.0.0 dirilis. Versi baru ini dirancang untuk membuat kerja dengan kerangka BDD ini lebih jelas dan fleksibel. Pada artikel ini saya akan berbicara tentang perubahan dan fitur baru, serta memberikan contoh penggunaannya.
Implementasi Ekspresi Mentimun
Dalam versi ketiga dari Mentimun JVM, Mentimun Ekspresi sekarang tersedia, bahasa ekspresi sederhana untuk menemukan substring dalam teks. Tidak seperti ekspresi reguler, bahasa ini dioptimalkan untuk keterbacaan, yang lebih masuk akal dalam konteks Mentimun. Jika Anda membutuhkan fleksibilitas, Anda masih dapat menggunakan ekspresi reguler.
Misalnya, kami memiliki fitur berikut:
# language: ru : : * 15 * "" * hello
Untuk mendapatkan argumen darinya, Anda dapat menggunakan deskripsi langkah-langkah berikut:
@(" {int}") public void giveInt(Integer int1) { System.out.println(int1); } @(" {string}") public void giveString(String string) { System.out.println(string); } @(" {word}") public void giveWord(String string) { System.out.println(string); }
Seperti yang Anda lihat dari contoh, Ekspresi Mentimun terdiri dari dua kurung keriting dengan jenis nilai yang dikirimkan.
Di luar kotak, jenis gigi berikut tersedia:
- {int}
- {float}
- {string}
- {kata}
- {biginteger}
- {bigdecimal}
- {byte}
- {pendek}
- {panjang}
- {ganda}
{string} sesuai dengan string yang dikutip, dan {kata} ke satu kata tanpa tanda kutip (pada saat penulisan, hanya kata yang ditulis dalam huruf Latin yang dapat ditransfer ke ekspresi {kata}).
Anda dapat membuat tipe data Anda sendiri, misalnya, kami ingin mentransfer objek kelas LocalDate dari fitur:
# language: ru : : * 01.06.2018
@(" {localdate}") public void ___(LocalDate localdate) { System.out.println(localdate.format(DateTimeFormatter.ofPattern("dd-MM-yyyy"))); }
Untuk melakukan ini, dalam paket yang ditentukan dalam lem, Anda perlu membuat kelas yang mengimplementasikan antarmuka TypeRegistryConfigurer, dan melalui itu menambahkan tipe data Anda ke registri:
public class TypeRegistryConfiguration implements TypeRegistryConfigurer { @Override public Locale locale() {
Kelas yang mengimplementasikan antarmuka TypeRegistryConfigurer harus satu dalam proyek, jika tidak pengecualian akan dilempar.
Ekspresi Mentimun juga memungkinkan Anda menentukan teks opsional dalam tanda kurung:
@("Hello, world(s)!") public void getHello() { System.out.println("Hello world!"); }
Anda tidak dapat menggunakan spasi di dalam tanda kurung (pada saat penulisan, hanya alfabet Latin yang didukung).
Teks alternatif ditentukan melalui garis miring:
@("/ ") public void getAlternative() { System.out.println("Hello world!"); }
# language: ru : : * *
Anda dapat melarikan diri {} dan () dengan garis miring terbalik.
Anda tidak dapat menggunakan Ekspresi Reguler dan Ketimun dalam definisi langkah yang sama.
Pengabaian XStream
Dalam versi pertama dan kedua Mentimun, ekspresi reguler dan pustaka XStreamsConverters digunakan untuk menentukan tipe data yang dikirimkan. Dalam versi ketimun ketiga, pengembang meninggalkan penggunaan perpustakaan XStreamsConverters.
Alasan untuk meninggalkan XStreamConverters adalah dokumentasi yang buruk, ketidakmampuan untuk menggunakan pemetaan objek pihak ketiga, dan kurangnya dukungan untuk Java 9.
Pembatas Anotasi, Format, Transformer, dan anotasi lainnya dari XStream tidak lagi berfungsi. Sebaliknya, Anda sekarang harus menggunakan ParameterType atau DataTableType.
DataTable
Tipe data DataTable juga telah mengalami perubahan.
Seperti pada versi sebelumnya, Mentimun menangani konversi DataTable dengan satu kolom ke Daftar, dua kolom ke Peta, dll. Tanpa masalah. Tetapi ini hanya berfungsi jika Anda mengonversi data ke salah satu dari jenis berikut: String, Integer, Float, Double, Byte, Short, Long, BigInteger atau BigDecimal.
Jika Anda ingin membuat objek dari beberapa kelas lain dari DataTable, maka, seperti dalam kasus tipe data kustom, Anda perlu menulis konverter Anda sendiri:
# language: ru : DataTable : | | | 09.02.1887 | | | | 23.02.1890 |
User.java import java.time.LocalDate; public class User { private String firstName; private String lastName; private LocalDate birthDay; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public LocalDate getBirthDay() { return birthDay; } public void setBirthDay(LocalDate birthDay) { this.birthDay = birthDay; } @Override public String toString() { return "User{" + "firstName='" + firstName + '\'' + ", lastName='" + lastName + '\'' + ", birthDay=" + birthDay + '}'; } }
@(" ") public void ___(List<User> users) { System.out.println(users); }
Konverter ditambahkan ke registri dengan cara yang sama seperti pada contoh dengan tipe data pengguna:
public class TypeRegistryConfiguration implements TypeRegistryConfigurer { @Override public Locale locale() { return new Locale("ru"); } @Override public void configureTypeRegistry(TypeRegistry typeRegistry) {
Sebelum dan Setelah Kait Langkah
Inovasi lain adalah pra dan pasca langkah. Sekarang Anda dapat menentukan kait yang akan dipanggil sebelum dan / atau setelah setiap langkah skrip.
Kait langkah ikuti aturan yang sama dengan kait level skrip:
- tag dapat digantung di kait untuk menjalankannya hanya dalam skenario tertentu;
- Anda dapat mengatur urutan pelaksanaan kait;
- AfterStep akan dieksekusi bahkan jika langkah setelah itu seharusnya dieksekusi istirahat.
# language: ru : @hooks : , @only_scenario_hooks : @only_step_hooks :
Sebagai kesimpulan, saya ingin mengatakan bahwa bahkan jika Anda menggunakan kemampuan XStream dalam proyek Anda dan dengan transisi ke versi baru Mentimun, akan diperlukan untuk melakukan perbaikan kecil, saya merekomendasikan ini. Mentimun didukung dan dikembangkan secara aktif, dan fitur-fitur baru menjadikan penggunaannya lebih fleksibel dan mudah dipahami.
Perbarui 09/23/2018Hari ini, Mentimun 4.0.0 telah dirilis. Saya tidak akan menjelaskan semua perubahan, saya hanya akan mengatakan bahwa sekarang bahasa Rusia biasanya didukung dalam Cucumber Expressions, dan juga bahwa contoh yang saya tulis dengan {string} dan {word} tidak akan lagi berfungsi. Faktanya adalah bahwa {kata} sekarang dapat berisi karakter non-spasi putih apa pun, yang menyebabkan konflik saat mencari langkah implementasi:
# language: ru : : * "" * hello
@(" {string}") public void giveString(String string) { System.out.println(string); } @(" {word}") public void giveWord(String string) { System.out.println(string); }
Referensi:
β
Contoh dari artikelβ
Artikel saya pada versi pertama dari Mentimun JVM