2 回答
TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊
要使用單元測試,您首先需要使代碼可測試。這可能需要一些代碼更改。無法在方法內(nèi)部模擬局部變量,因此您需要將這些變量作為參數(shù)傳遞給方法,或者在對象內(nèi)部創(chuàng)建屬性并將模擬對象傳遞給構(gòu)造函數(shù)。
@Component
public class DataSourceAttributes {
private AbstractConnector abstractConnector;
private GenericManager genericManager;
@Autowired // to ask Spring to inject dependencies
public DataSourceAttributes(AbstractConnector abstractConnector, GenericManager genericManager) {
this.abstractConnector = abstractConnector;
this.genericManager = genericManager;
}
public AWSSecretDB getAttribsBySecret() throws Exception {
System.out.println("Generic Manager: " + genericManager);
AWSSecretDB awsSecretDB;
try {
awsSecretDB = genericManager.getSecretModel(secretName, AWSSecretDB.class);
System.out.println("awsSecretDB: " + awsSecretDB.getEngine()); // It must be mocked
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
throw e;
}
return awsSecretDB;
}
}
然后在測試中創(chuàng)建對象的實(shí)例,將模擬依賴項(xiàng)傳遞給構(gòu)造函數(shù)
TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個(gè)贊
如果您知道代碼有效,那么首先為什么要對其進(jìn)行單元測試?或者,如果您不打算更改源來修復(fù)它,為什么要執(zhí)行可能帶來錯(cuò)誤的活動(dòng)?
但是,更嚴(yán)重的是,您似乎陷入了“遺留代碼困境”:要修改代碼,您寧愿進(jìn)行適當(dāng)?shù)臏y試。要進(jìn)行測試,您必須修改代碼。
對此的逃避是從剛好足以創(chuàng)建您需要的那些測試的微創(chuàng)更改開始。由于這是一種遷移方法,有時(shí)甚至可以接受一些骯臟的技巧來克服困境。Michael Feathers 在“有效處理遺留代碼”中詳細(xì)討論了這一點(diǎn),并提供了許多實(shí)用建議。
在像 Java 這樣具有自省功能的語言中,有時(shí)自省可以成為一個(gè)解決方案,以實(shí)現(xiàn)更好的可測試解決方案。然而,這屬于骯臟的伎倆,除了作為遷移到更好解決方案的一種方式之外,我認(rèn)為這是不可取的。
添加回答
舉報(bào)
