以上測試是作為簡單的 JUnit 測試運行的,沒有代碼覆蓋。您可以用大多數代碼覆蓋工具(例如,Cobertura 或 EclEmma)來運行本文中列出的任何一個測試。但是,用 Eclipse 內的代碼覆蓋工具運行 RMock 測試時會帶來一些問題(參見 表 1)。以下代碼顯示了實際堆棧跟蹤的代碼片段。
清單 7. 場景 3 中測試失敗的堆棧跟蹤
...Superclass has no null constructors but no arguments were given
at net.sf.cglib.proxy.Enhancer.emitConstructors(Enhancer.java:718)
at net.sf.cglib.proxy.Enhancer.generateClass(Enhancer.java:499)
at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)
at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:285)
at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:660)
.....
.....
|
失敗原因是 jMock 無法通過沒有無參數構造函數的類定義創建可行的模擬對象。實例化 Collaborator
對象的惟一方法是提供兩個簡單參數。您現在必須找到一種方法把參數提供給模擬對象實例化過程以達到同樣的效果,這就是使用 RMock 的原因。