2017-08-07 26 views
0

我的JSON是JUnit測試案例以下JSON沒有給予直接的值或硬編碼

{ 
    "name":"John", 
    "age":30, 
    "cars": [ 
     { "name":"Ford", "models":[ "Fiesta", "Focus", "Mustang" ] }, 
     { "name":"BMW", "models":[ "320", "X3", "X5" ] }, 
     { "name":"Fiat", "models":[ "500", "Panda" ] } 
    ] 
} 

所以我寫了樣本JUnit測試用例的方法carinfo這是

@Test 
public void Test(){ 
    assertEquals(carinfo.cars.get(0).name(), Temporary value); 
} 

我想JUnit測試用例。因此,它是正確的或任何更正

+0

我們可以看到背後的代碼:*** carinfo.cars.get(0).name()*** –

+0

我剛剛使用了互聯網上的示例json – venkatesh529

+0

是的,但是您的來自Internet的json必須轉換成一個對象... –

回答

0

假設你的要求是:

我有deserialises給定的JSON到CarPartsCars當我測試程序,我不想硬編碼的例行我預期相反,我希望能夠詢問JSON編程形成斷言

例如:

@Test 
public void testJson() { 
    String json = "{\n" 
     + " \"name\":\"John\",\n" 
     + " \"age\":30,\n" 
     + " \"cars\": [\n" 
     + "  { \"name\":\"Ford\", \"models\":[ \"Fiesta\", \"Focus\", \"Mustang\" ] },\n" 
     + "  { \"name\":\"BMW\", \"models\":[ \"320\", \"X3\", \"X5\" ] },\n" 
     + "  { \"name\":\"Fiat\", \"models\":[ \"500\", \"Panda\" ] }\n" 
     + " ]\n" 
     + " }"; 

    CarInfo carinfo = deserialise(json); 

    // for the above JSON this JsonPath call will return "Ford" 
    Assert.assertEquals(JsonPath.read(json, "$.cars[0].name"), carinfo.getCars().get(0).getName()); 
} 

如果是這樣,那麼JsonPath聽起來很合適;它允許您詢問Json併爲您的測試案例產生期望,如上例所示。

+0

沒有這種方法就像硬編碼直接提供值,但是當json值被改變時的一天測試用例應該改變,所以我想不用硬編碼 – venkatesh529