我正在嘗試爲繼承的基於Spring
的項目配置單元測試。我嘗試了一些東西,但基本上我試圖將@Autowired
的東西塞進我的測試用例中。這裏是我的設置:「簡單」彈簧單元測試
控制器類,看起來像這樣:
@Controller("serverService")
@RequestMapping("/rest/server")
@Api(value = "server")
public class ServerServiceImpl extends AbstractServiceImpl implements ServerService {
@Override
@RequestMapping(value = "/getTime", method = RequestMethod.GET)
public @ResponseBody
GatewayResponse<TimeData> getTime() {...}
ServerService
僅僅是能夠互操作與GWT
的接口。我現在不太擔心GWT
的單元測試。
AbstractServiceImpl
的主要目的是包裝一個基於SOAP
的Web服務,該服務器本質上是代理服務器,使移動友好。網絡服務由Apache CXF
自動生成。 AbstractServiceImpl
如下(大約):
public class AbstractServiceImpl {
@Autowired
private WebServices webServices;
public WebServices getWebServices() {
return webServices;
}
在我的測試類,我有:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:**/applicationContext.xml", "classpath:**/applicationContext-Services.xml"})
@WebAppConfiguration
public class LoginTest {
@Autowired
private ServerServiceImpl svc;
public LoginTest() {
}
@Test
public void validate() {
assertNotNull(svc);
}
}
我在努力與模擬JSON和這樣的模擬電話到我的web服務沒有興趣。我只想編寫單元測試,創建未嘲笑的ServerServiceImpl
與未嘲笑的WebServices
對象並調用實時服務器。
我的測試目前失敗,因爲@Autowired
無法創建ServerServiceImpl
。我也嘗試重構我的代碼,使用@Autowired
作爲WebServices
,並使用它傳遞給構造函數ServerServiceImpl
,但這也由於@Autowired
而失敗。
是applicationContext.xml的文本中的類路徑或只是你活的? – tom 2014-10-27 23:50:36
我只有一個applicationContext.xml,所以我認爲這必須是活的......除非有些魔法/彈簧魔法以某種方式創建另一個。 – Tim 2014-10-27 23:51:33
要單元測試這些,請使用構造函數注入和一個模擬庫(如Mockito)。這可以讓你完全避免使用Spring,並且在沒有外部依賴的情況下單獨測試這個類。 – chrylis 2014-10-28 00:08:37