的在我的項目我使用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");
時沒有問題。我明白這可能是一個反思的問題,但我不明白爲什麼這個問題出現在我的單元測試中,而不是在我的應用程序中...
最後一個問題是我該如何測試這個代碼?
如果該字段是在'A'中聲明的,則需要'xStream.aliasAttribute(A.class,「name」,「name」);'。或者更容易,你可以使用註釋,然後這種問題完全是旁觀的。至於爲什麼它在你的應用程序,你可能有''用於定義A.class'某處name'場,這就是爲什麼它的工作原理的別名。 – biziclop
@biziclop我希望我可以使用註釋,但事實上根據擴展抽象類我有其他的映射到位之類的。這就是爲什麼我必須用一些代碼來做... – bryce