Apakah mungkin menghitung jumlah anggota yang menggunakan JsonPath?
Menggunakan uji mvc pegas, saya menguji pengontrol yang menghasilkan
{"foo": "oof", "bar": "rab"}
dengan
standaloneSetup(new FooController(fooService)).build()
.perform(get("/something").accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk())
.andExpect(jsonPath("$.foo").value("oof"))
.andExpect(jsonPath("$.bar").value("rab"));
Saya ingin memastikan bahwa tidak ada anggota lain yang hadir di json yang dihasilkan. Semoga dengan menghitungnya menggunakan jsonPath. Apa itu mungkin? Solusi alternatif juga diterima.
hamcrest-all
sebagai ketergantungan, tetapi gunakanhamcrest-library
: code.google.com/p/hamcrest/wiki/HamcrestDistributablesAnda juga dapat menggunakan metode di dalam jsonpath, jadi sebagai ganti
Anda dapat melakukan
sumber
Kita bisa menggunakan fungsi JsonPath seperti
size()
ataulength()
, seperti ini:Atau cukup parse
net.minidev.json.JSONObject
dan dapatkan ukurannya:Memang, pendekatan kedua terlihat berkinerja lebih baik daripada yang pertama. Saya melakukan tes kinerja JMH dan saya mendapatkan hasil sebagai berikut:
Kode contoh dapat ditemukan di sini .
sumber
Aku berurusan dengan ini sendiri hari ini. Sepertinya ini tidak diterapkan dalam pernyataan yang tersedia. Namun, ada metode untuk melewatkan suatu
org.hamcrest.Matcher
objek. Dengan itu Anda dapat melakukan sesuatu seperti berikut:sumber
jika Anda tidak memiliki
com.jayway.jsonassert.JsonAssert
classpath Anda (yang terjadi pada saya), pengujian dengan cara berikut mungkin merupakan solusi yang mungkin:[catatan: saya berasumsi bahwa konten json selalu berupa array]
sumber