2016-03-02 112 views
0

嗨,我對Maven是全新的,我的Java知識很低,我的編程在其他領域很好,但我有點不知所措,目前這種多模式的大小Maven構建我是試圖工作。瞭解mvn單元測試錯誤與JSON MockHttpServletResponse測試

我試圖運行MVN測試時,安裝Maven構建SDK和收到此錯誤:

Tests run: 4, Failures: 2, Errors: 0, Skipped: 0, Time elapsed: 0.194 sec <<< FAILURE! 
testWriteWithMap(eu.sdk.util.JsonWriterTest) Time elapsed: 0.181 sec <<< FAILURE! 
junit.framework.ComparisonFailure: null expected:<{"[b":12,"c":123,"a":"test1"]}> but was:<{"[a":"test1","b":12,"c":123]}> 
    at junit.framework.Assert.assertEquals(Assert.java:81) 
    at junit.framework.Assert.assertEquals(Assert.java:87) 
    at junit.framework.Assert$assertEquals$0.callStatic(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:53) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:157) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:169) 
    at eu.digient.sdk.util.JsonWriterTest.testWriteWithMap(JsonWriterTest.groovy:28) 

testConvert2JsonStrWithMap(eu.sdk.util.JsonWriterTest) Time elapsed: 0.001 sec <<< FAILURE! 
junit.framework.ComparisonFailure: null expected:<{"[b":12,"c":123,"a":"test1"]}> but was:<{"[a":"test1","b":12,"c":123]}> 
    at junit.framework.Assert.assertEquals(Assert.java:81) 
    at junit.framework.Assert.assertEquals(Assert.java:87) 
    at junit.framework.Assert$assertEquals$0.callStatic(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:53) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:157) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:169) 
    at eu.digient.sdk.util.JsonWriterTest.testConvert2JsonStrWithMap(JsonWriterTest.groovy:85) 

我已經查明錯誤的測試文件,發現測試功能在這裏:

@Test 
    public void testWriteWithMap() { 
     MockHttpServletResponse response = new MockHttpServletResponse(); 
     Map<String, Object> jsonBean = new HashMap<String, Object>(); 

     jsonBean.put("a", "test1"); 
     jsonBean.put("b", 12); 
     jsonBean.put("c", new BigDecimal(123)); 

     try { 
      JsonWriter.write(response, jsonBean); 

      assertEquals("{\"b\":12,\"c\":123,\"a\":\"test1\"}", response.getContentAsString()); 
     } catch (HttpMessageNotWritableException e) { 
      fail("fail"); 
     } catch (IOException e) { 
      fail("fail"); 
     } 
    } 

爲什麼這個失敗,我的假設是這應該是正確的測試,從一個曾經在我的新客戶端的服務器項目上工作的代碼繼承。我真的不明白這個測試目標是什麼時候?請問有人能給我啓迪嗎?

回答

0
junit.framework.ComparisonFailure: null expected:<{"[b":12,"c":123,"a":"test1"]}> but was:<{"[a":"test1","b":12,"c":123]}> 

這表明預期與實際之間的等同性失敗。失敗後的原因是assertEquals - 它尋找完全匹配。

用途:JSONGson用於比較的API。

這應該是正確的測試,從一個曾經在我的新客戶端的服務器項目上工作的代碼繼承了此代碼。

您確定它是在父版本的代碼中執行的嗎?根據Sorted input參數,默認設置爲false,且值不排序,也取決於Sort Keys。輸入順序保持不變。

不是最佳實踐來硬編碼輸出參數的所有時間。可以使用定義的方法here

編輯:

  • 如果Java對象的順序必須保持@JsonPropertyOrder可以使用。
  • 如果您使用的是GSON api,則可以使用串行器來定義輸入/輸出順序。 Source
  • 如果您使用CloverETL爲您提供維護排序後的輸入訂單的選項。 Source

然而,強烈建議不要依賴於按鍵的順序,而不是有非常強的理由這樣做。使用JsonObjectcontainsKey()比排序和操作順序更優選。

+0

對不起,我在這裏很笨,但是這是哪裏? 「根據Sorted輸入參數」我假設我可以定義未分類與已排序。這是爲了assertEquals檢查嗎? – Beloudest

+0

這就是爲什麼我實際上感到困惑 - 爲什麼junit測試的比較順序不同?如果它一直是錯誤的等... – Beloudest

+0

請參閱'編輯' – VinayVeluri