2016-03-15 61 views
2

的在我的項目我使用XStream序列化/反序列我的實體訪問現場。
Everythings在應用程序中正常工作,但在創建單元測試時無法正常工作。

我有一個抽象類A與現場name和公衆存取。我有一個類B,延伸A
我XStream的配置是這樣的一個:
XStream的:無法實現抽象類

XStream xStream = new XStream(); 
// 
xStream.alias("classNameSerialized", AnotherClass.class); 
xStream.aliasAttribute(AnotherClass.class, OBJECT_ATTRIBUT_VERSION, OBJECT_ATTRIBUT_VERSION); 
... 
// 
xStream.alias("classNameSerialized", B.class); 
xStream.aliasAttribute(B.class, "name", "name"); 

當我運行我的應用程序,是沒有問題的。但是,當我嘗試創建一個單元測試,XStream的火災例外:IllegalArgumentException: could not access org.mycompagny.B.name field: name

編輯

我在我的測試B.class.getDeclaredField("name");嘗試和它拋出我相同的異常。但是當我嘗試A.class.getDeclaredField("name");時沒有問題。我明白這可能是一個反思的問題,但我不明白爲什麼這個問題出現在我的單元測試中,而不是在我的應用程序中...

最後一個問題是我該如何測試這個代碼?

+2

如果該字段是在'A'中聲明的,則需要'xStream.aliasAttribute(A.class,「name」,「name」);'。或者更容易,你可以使用註釋,然後這種問題完全是旁觀的。至於爲什麼它在你的應用程序,你可能有''用於定義A.class'某處name'場,這就是爲什麼它的工作原理的別名。 – biziclop

+1

@biziclop我希望我可以使用註釋,但事實上根據擴展抽象類我有其他的映射到位之類的。這就是爲什麼我必須用一些代碼來做... – bryce

回答

0

要解決我的問題,我不得不刪除我的抽象類...
對我來說,這不是一個大問題,只有5類從抽象類繼承。
如果有人有更好的解決方案,請將它發佈到這裏;-)