2013-11-01 18 views
8

template.welcome.email adlı bir json alanım var ve bu alanın sunucudan yanıtta olup olmadığını kontrol eden bir birim testi yazıyorum ancak bir çıkış bulamıyorum alan adına noktalar için. noktalar yolları gibi yorumlanır çünküJsonPath JUnit noktalar için çıkış karakteri

@Test 
public void testEmailTemplates() throws Exception {  
    mockMvc.perform(get("/emailTemplates") 
     .contentType(MediaType.APPLICATION_JSON) 
     .locale(Locale.UK) 
     .accept(MediaType.APPLICATION_JSON)) 

     .andDo(print()) 
     .andExpect(status().isOk()) 

     .andExpect(jsonPath("$.template.welcome.email").exists()) 

     .andExpect(redirectedUrl(null)) 
     .andExpect(forwardedUrl(null)); 
} 

Ama şu istisna olsun:

java.lang.AssertionError: No value for JSON path: $.template.welcome.email, exception: invalid path 
at org.springframework.test.util.JsonPathExpectationsHelper.evaluateJsonPath(JsonPathExpectationsHelper.java:74) 
at org.springframework.test.util.JsonPathExpectationsHelper.exists(JsonPathExpectationsHelper.java:121) 
at org.springframework.test.web.servlet.result.JsonPathResultMatchers$3.match(JsonPathResultMatchers.java:77) 
at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:141) 
at 

Eğer jsonPath için herhangi bir kaçış karakterini biliyor musunuz benim testin kodudur?

cevap

4

pointed outIda gibi:

köşeli parantez kullanın ve alanının etrafında tırnak. Örneğin, alan

[ 'valid.key.with.dot'] o sonuca bakın ve JsonPath içinde,

JsonPath.read(jsonString, "$.['valid.key.with.dot']")

+0

Aynı düşüncelerim var, bakalım kimsenin zekice bir fikri varsa .. – daniele

+0

Ohhh, işte bu yüzden benim yolum (bir kaçış eğik çizgi ile) çalışmıyor! – Tom

+0

Evet, Mümkün, bkz. Ida'nun cevabı –

32

kullanın deneyin valid.key.with.dot ise alanınızın etrafında parantez ve tırnak. (https://groups.google.com/forum/#!topic/jsonpath/7YvgXWP1_7Y

+0

Bu, JsonPath'ı dahili olarak kullanan diğer kitaplıklarda da çalışır (örneğin REST güvencesi). Teşekkürler Ida! –

+0

Sadece bunu SOAP UI'de yaptım - JsonPath Match. Mükemmel çalışıyor! – iaforek

3

Bu gün: Örneğin, alan valid.key.with.dot

, ['valid.key.with.dot'] olarak ve JsonPath buna bakın

JsonPath.read(jsonString, "$.['valid.key.with.dot']") 

de bu thread bakınız denemek ise örneğin io.rest-assured.json-path:3.0.1) notasyonu parantez olmadan gibi görünüyor:

// Some Groovy OData V4 $count test 
// Response looks like: 
// { "@odata.count": 2, ... } 
body "'@odata.count'", equalTo(2) 

Ben Corr bulundu ipucu in this Git issue.