2017-07-14 80 views
2

我試圖比較兩個jsons,預期和使用Javers的API響應,作爲測試的一部分。我想要進行比較以排除由響應動態生成的ID參數。Javers:在比較兩個jsons時忽略Value Object中的特定字段

我的VO是像

public class expectedResponse{ 

@DiffIgnore 
private String id; 
private String name; 

} 

我的兩個expectedResponse-這是從Excel文件和API的實際響應讀反序列化到這個格式,那麼無論是反應進行了比較。

JsonNode expectedOutput = mapper.readTree(expected.toString()); 
JsonNode apiResponse = mapper.readTree(actual.toString()); 
diff=javers.compare(expectedOutput, apiResponse); 

但是這種比較不排除/忽略ID字段。任何想法如何讓它工作?我只想在比較結果中排除ID字段,應列出名稱差異。

還質疑2>我試圖列出從差異

if (diff.hasChanges()) 
    {    

    List<ValueChange> changes=diff.getChangesByType(ValueChange.class); 
    for (ValueChange change : changes) 
    { 
    logger.info(change.getPropertyName()+ "||" +change.getLeft().toString() + "||" +change.getRight().toString()); 

change.getPropertyName()的變化 - 犯規打印屬性的名稱,但只是簡單地打印「_value」作爲它的值。

你能幫助確定代碼出了什麼問題,我該如何解決這個問題?我在谷歌的任何地方都找不到有關Javers的有用文件。任何幫助表示讚賞。

回答

1

你應該比較您正在訪問的對象,而不是對象,具有JsonNode類,外觀,@DiffIgnore註解只存在於你的域類和有JsonNodeExpectedResponse之間沒有連接,這就是爲什麼Javers不知道要忽略這一領域。

總而言之,你的代碼應該是這樣的:

ExpectedResponse expectedOutput = ... 
ExpectedResponse apiResponse = ... 
diff=javers.compare(expectedOutput, apiResponse); 
+0

感謝帕維爾。這正是我所犯的錯誤,一直在盯着臉。我把它們轉換成了String,這導致了所有的麻煩。非常感謝您的幫助!謝謝。 – Divya