Tuesday, December 9, 2008

Bug in appfuse 2.0.2 DaoTest

今天試著照著 appfuse 的 tutorial 上走一次,以了解 2.0 與 1.9 版的差異,當用 JPA 做完 PersonDaoTest 後,發現了兩個 bug

1. 若測試 PersonDaoTest 時假資料是用

person = (Person) populate(person);

的方式且是用 PersonDaoTest.properties 做假資料,因 test-compile 會漏掉將 PersonDaoTest.properties 複製到 classpath 中,以致於測試 PersonDaoTest 會失敗,因為無法取得假資料。

解法 : 在 pom.xml 上補上複製 properties 的敘述
line 293
<testResources>
<!-- copy test property file in test class path -->
<testResource>
<directory>src/test/java</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
</includes>
</testResource>

這樣就可以將 PersonDaoTest.properties 複製到 test-classes 中了

2. 這個 bug 較嚴重
在 BaseDaoTestCase 中,line 74

BeanUtils.copyProperties(map, obj);

跑測試的時候發現假資料無法複製到 obj (person instance) 中,後來查 API 才發現應該是

BeanUtils.copyProperties(obj, map);

才對,因為 API 為
copyProperties(Object dest, Object orig)
Copy property values from the origin bean to the destination bean for all cases where the property names are the same.

這個 bug 對於使用 populate 的人而言算滿嚴重的,可能會讓試用 appfuse 的人卻步,所以在此提供大家做參考

No comments: