我有定義的方法是這樣的:
class Template{
public void process(Object rootMap, StringWriter out){
.......
}
}
我會告訴你如何改變/修改 「OUT」(StringWriter的)參考。
private final Template mocktTemplate = mock(Template.class);
doAnswer(new Answer<StringWriter>() {
public StringWriter answer(InvocationOnMock invocation)
throws Throwable {
Object[] args = invocation.getArguments();
if (args[1] instanceof StringWriter) {
StringWriter stringWriter = (StringWriter) args[1];
stringWriter.write("Email message");
}
return null;
}
}).when(this.mocktTemplate).process(anyObject(),any(StringWriter.class));
現在,當你做出這樣的實際調用:
msgBodyTemplate.process(model, msgBodyWriter);
在msgBodyWriter StringBuffer的參考價值將是「電子郵件信息」;不管它早先的價值。
恩..好的,那是一個選項。但是如果我無法更改當前的代碼,或者重構真實設計以便使測試更容易創建,那該怎麼辦? – TryHarder
是的,沒錯。編寫可測試代碼是開發人員良好工作的重要組成部分。這就是IOC框架如此受歡迎的原因:它促進了一個使代碼可測試的設計。 –
謝謝。我會離開這個線程,也許還有一些選項可以讓我用mockito來做什麼,只是爲了學習目的。同時我會遵循你的建議。 – TryHarder