viewInvoiceAsPDFController.handleRequest( request, response );
byte[] responsePDFValues = response.getContentAsByteArray();
byte[] expectedPDFValues = loadBytesFromTestFile();
assertTrue( "Did not generate expected PDF content.", Arrays.equals(responsePDFValues,expectedPDFValues ));
}
注意,在此你的控制器ViewInvoiceAsPDFController不是返回ModelAndView對象,而是產生了二進制輸出—你可以使用一個二進制的數組形式來捕獲此控制器并對此進行正確性評價。
五、事務性單元測試
到目前為止,你已看到了相對簡單的JUnit測試—它僅發生在用mock對象支持的一個控制器的上下文中。但是,如果測試一個Web組件只有在一個事務性上下文(例如,通過依賴性注入與Hibernate集成到一起)中才有意義的情況又會怎么樣呢?不必擔心,Spring MVC為JUnit框架提供了一個體面的擴展集合—它能準確地提供依賴性注入和事務安全測試(也就是,任何更新在測試完成后都將被回滾)。
測試步驟:
讓我們看一種假想的情形—你要實現一個組件(例如MyTransactionalController)測試,該組件運行在一個事務性的上下文中(也即,其方法調用的結果發生在一個事務內并且它應該在測試運行完后被回滾):
1.創建一個定制的JUnit類(MyTransactionalControllerTest),它擴展了Spring的JUnit擴展類 AbstractTransactionalSpringContextTests:
import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
public class MyTransactualControllerTest extends AbstractTransactionalSpringContextTests {
public class.
2.為了實現從Spring內置的單元測試中發現Spring管理的bean,你需要重載getConfigLocations()方法并且返回上下文文件位置的String數組,請看如下:
protected abstract String[] getConfigLocations(){ return new String[] {"classpath:/test/spring-context.xml"};}
3.擁有該類的一個測試屬性及其相關聯的getter和setter。由于AbstractTransactionalSpringContextTests利用了auto-wiring(這是Spring框架的一個特性—能夠根據類屬性的名字識別類依賴性并且用Spring bean填入相匹配的名字或ID)技術而且在測試時它將自動地解決類的依賴性問題,所以在Spring上下文文件中該類屬性具有與Spring管理的bean一樣的名字并且在測試時每個屬性都有一個適當命名的setter:
public MyTransactualController myTransactualController;
/** * @返回myTransactualController。 */
public MyTransactualController getMyTransactualController()
{
文章來源于領測軟件測試網 http://www.kjueaiud.com/