你可以在Seam的更復雜的示例應用程序中找到大量關于集成測試的用法,還有在Ant或者Eclipse的TestNG插件下運行這些測試的使用說明。

31.3.1. 利用Mock數據進行集成測試
如果你需要在每個測試之前在數據庫中插入或清除數據,你可以使用DBUnit進行Seam的集成測試。要做到這一點,要繼承DBUnitSeamTest而不是SeamTest。
你需要提供數據集給DBUnit:
<dataset>
<ARTIST
id="1"
dtype="Band"
name="Pink Floyd" />
<DISC
id="1"
name="Dark Side of the Moon"
artist_id="1" />
</dataset>
并通過覆蓋prepareDBUnitOperations()來告訴Seam:
protected void prepareDBUnitOperations() {
beforeTestOperations.add(
new DataSetOperation("my/datasets/BaseData.xml")
);
}
如果沒有指定其它的操作作為構造器參數DataSetOperation的操作默認是DatabaseOperation.CLEAN_INSERT。 在調用每個@Test方法前,上述的示例會先清除BaseData.xml中定義的所有的表,然后插入BaseData.xml中定義的所有的數據行。
如果你需要在一個測試方法執行后進行額外的清除工作,添加操作到afterTestOperations列表中。
你需要通過設置一個名為datasourceJndiName的TestNG測試參數來告訴DBUnit你正在使用的數據源:
<parameter name="datasourceJndiName" value="java:/seamdiscsDatasource"/>
31.3.2. Seam Mail集成測試
警告!這個功能仍在開發當中。
集成測試Seam Mail相當的簡單:
public class MailTest extends SeamTest {
@Test
public void testSimpleMessage() throws Exception {
new FacesRequest() {
@Override
protected void updateModelValues() throws Exception {
setValue("#{person.firstname}", "Pete");
setValue("#{person.lastname}", "Muir");
setValue("#{person.address}", "test@example.com");
}
@Override
protected void invokeApplication() throws Exception {
MimeMessage renderedMessage = getRenderedMailMessage("/simple.xhtml");
assert renderedMessage.getAllRecipients().length == 1;
Inte.netAddress to = (InternetAddress) renderedMessage.getAllRecipients()[0];
assert to.getAddress().equals("test@example.com");
}
}.run();
}
}
我們與往常一樣創建一個新的FacesRequest。 在 invokeApplication 里我們通過傳遞消息的viewId去渲染getRenderedMailMessage(viewId);的消息。 這個方法返回已經渲染完成的消息,你可以繼續進行你的測試。你當然可以同時使用任何一項標準JSF的生命周期的方法。
還有就是不支持渲染標準JSF組件,所以你不能方便地測試郵件消息的內容主體。