亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用mockito的空指針問題

使用mockito的空指針問題

森欄 2023-09-20 19:17:06
我正在嘗試測試一種方法。在這個方法中,實例化了一個新對象,但我不想要它,否則將測試其他類。我如何告訴mockito不要實例化它?@Component@EnableSchedulingpublic class VerificadorDeNovasAssinaturas {     private DocuSign docuSign;    private ApiClient apiClient;    @Autowired    private DocuSignProperties docuSignProperties;    public EnvelopesInformation verificaNovasAssinaturas() throws Exception {        this.docuSign = new DocuSign(docuSignProperties); // I don't want mockito instanciate DocuSign        this.apiClient = docuSign.getApiClient();        this.apiClient.addDefaultHeader("Authorization", "Bearer " + docuSign.getoAuthToken().getAccessToken());還有我的測試課:@SpringBootTest@RunWith(SpringRunner.class)@ActiveProfiles("test")public class VerificadorDeNovasAssinaturasTest {@InjectMocksprivate VerificadorDeNovasAssinaturas verificador;private DocuSignProperties docuSignProperties;private ApiClient apiClient;private UserInfo userInfo; private OAuthToken oAuthToken;@Mockprivate DocuSign docuSign;@Beforepublic void initialize() throws Exception {    docuSignProperties = new DocuSignProperties();    docuSignProperties.setBaseUrl("https://demo.docusign.net/restapi");    docuSignProperties.setBasePath("/restapi");    setApiClientConfigurations();    when(docuSign.getApiClient()).thenReturn(this.apiClient);            when(docuSign.getoAuthToken()).thenReturn(this.oAuthToken);    ...}private void setApiClientConfigurations() throws Exception {    this.apiClient = new ApiClient(this.docuSignProperties.getBaseUrl());    this.oAuthToken = getOAuth();            ... } @Test public void testaVerificacaoDeNovasAssinaturas() throws Exception {    EnvelopesInformation results = verificador.verificaNovasAssinaturas();    assertNotNull(results);}我不想讓mockito實例化一個新的DocuSign,因為這不是測試的原因。有什么方法可以忽略這一步嗎?
查看完整描述

2 回答

?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

好吧,如果您的代碼(要測試的代碼,您打算這樣做)做了某些事情,Mockito 無法更改某些內容,但是您可以模擬它,以便它不會創建新對象(而是創建您的“模擬對象”),這樣您可以根據預期行為驗證某些內容。


在您的代碼中,如果您更改幾行,您就可以實現您想要的,例如 - 創建一個 DocuSignService 類,然后在其中創建這個新對象 - getDocuSign 方法。然后你的代碼如下所示 -


@Autowired

private DocuSignService docuSignService ;


this.docuSign = new DocuSign(docuSignProperties); // This is what you have

this.docuSign = this.docuSignService.getDocuSign() ; // This is new code

現在在你的測試用例中 -


@Mock

DocuSignService docuSignService ;

@Mock

private DocuSign docuSign;

//.

//.

Mockito.when(this.docuSignService.getDocuSign()).thenReturn(docuSign);

現在你可以控制這個對象了。


查看完整回答
反對 回復 2023-09-20
?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

I resolved it using powerMockito.


DocuSign docuSign = PowerMockito.mock(DocuSign.class);

PowerMockito.whenNew(DocuSign.class).withAnyArguments().thenReturn(docuSign);


查看完整回答
反對 回復 2023-09-20
  • 2 回答
  • 0 關注
  • 279 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號