使用mockito的空指针问题

我正在尝试测试一种方法。在这个方法中,实例化了一个新对象,但我不想要它,否则将测试其他类。我如何告诉mockito不要实例化它?


@Component

@EnableScheduling

public 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 {


@InjectMocks

private VerificadorDeNovasAssinaturas verificador;


private DocuSignProperties docuSignProperties;

private ApiClient apiClient;

private UserInfo userInfo; 

private OAuthToken oAuthToken;


@Mock

private DocuSign docuSign;



@Before

public 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,因为这不是测试的原因。有什么方法可以忽略这一步吗?


森栏
浏览 120回答 2
2回答

慕哥9229398

好吧,如果您的代码(要测试的代码,您打算这样做)做了某些事情,Mockito 无法更改某些内容,但是您可以模拟它,以便它不会创建新对象(而是创建您的“模拟对象”),这样您可以根据预期行为验证某些内容。在您的代码中,如果您更改几行,您就可以实现您想要的,例如 - 创建一个 DocuSignService 类,然后在其中创建这个新对象 - getDocuSign 方法。然后你的代码如下所示 -@Autowiredprivate DocuSignService docuSignService ;this.docuSign = new DocuSign(docuSignProperties); // This is what you havethis.docuSign = this.docuSignService.getDocuSign() ; // This is new code现在在你的测试用例中 -@MockDocuSignService docuSignService ;@Mockprivate DocuSign docuSign;//.//.Mockito.when(this.docuSignService.getDocuSign()).thenReturn(docuSign);现在你可以控制这个对象了。

月关宝盒

I resolved it using powerMockito.DocuSign docuSign = PowerMockito.mock(DocuSign.class);PowerMockito.whenNew(DocuSign.class).withAnyArguments().thenReturn(docuSign);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java