Проблемы с внедрением зависимостей с использованием Mockito - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь внедрить зависимость в свой класс. Но по какой-то причине, когда я тестирую его с помощью Mockito, он не работает, а объект не создается и остается нулевым.

@Data
@Component
@ConfigurationProperties(prefix="docusign")
public class DocuSignProperties {

private String oAuthBaseUrl;
private String baseUrl;
}

В application.properties:

#docuSign properties
docusign.oAuthBaseUrl=https://account-d.docusign.com/oauth
docusign.baseUrl=https://demo.docusign.net/restapi

Класс, который внедряет DocuSignProperties:

@Component
public class DocuSign {
    @Autowired
    private DocuSignProperties docuSignProperties;

    private ApiClient apiClient;
    private OAuthToken oAuthToken;
    private UserInfo userInfo;

    public DocuSign() {
        this.initialize();
}

    public DocuSign(ProjetoDTO projeto)  {
        this.projeto = projeto;
        this.initialize();
}

    private void initialize() {
    try {
        this.apiClient = new ApiClient(this.docuSignProperties.getBaseUrl()); //here docuSignProperties is null, when should it be instantiated
        this.oAuthToken = getOAuthTokenAcesso();
        this.setApiClientConfigurations();
    }catch (Exception e) {
        LOGGER.error(e.getMessage());
        e.printStackTrace();
    }
}

Класс, который его тестирует:

public class DocuSignTest {
    private DocuSignProperties docuSignProperties;
    private ProjetoDTO projeto1;
    @Mock
    private DocuSignProperties docuSignProperties;

    @Before
    public void setup() throws IOException {
       projeto1 = new ProjetoDTO();
       projeto1.setId(1L);
       projeto1.setDsProjeto("projeto1")
    }
  @Test
  public void criarDocumento() throws Exception {
      DocuSign docuSign = new DocuSign(projeto1);
      docuSign.sendDoc();
      assertNotNull(docuSign);
}

Я хотел бы знать, почему при инициализации не описывается метод documentSignProperties.

Ответы [ 2 ]

0 голосов
/ 03 октября 2019

Я изменяю конструктор на

public DocuSign(DocuSignProperties docuSignProperties) {
    this.initialize(docuSignProperties);
}

public DocuSign(ProjetoDTO projeto, DocuSignProperties docuSignProperties)  {
    this.projeto = projeto;
    this.initialize(docuSignProperties);
}

private void initialize(DocuSignProperties docuSignProperties) {...}

и на моем тестовом классе:

@Before
public void setup() throws IOException {
   docuSignProperties = new DocuSignProperties();
   docuSignProperties.setBaseUrl("https://demo.docusign.net/restapi");
   docuSignProperties.setBasePath("/restapi");

@Test
public void criarDocumento() throws Exception {
    DocuSign docuSign = new DocuSign (projeto1, docuSignProperties);
    docuSign.sendDoc();
    assertNotNull(docuSign);
}
0 голосов
/ 03 октября 2019

для использования аннотаций. Макет, который вы можете использовать:

 MockitoAnnotations.initMocks(this);

или добавьте в начале класса:

@RunWith(org.mockito.runners.MockitoJUnitRunner.class)

Более того, вы должны ввести свой макет, который вы можете использовать @InjectMocks, что я предпочел бы не рекомендовать, но изменить ваш конструктор или использовать установщик, это зависит от того, является ли этот класс обязательным или необязательным:

 @Autowired
 public DocuSign(DocuSignProperties docuSignProperties) {
    this.initialize();
    this.docuSignProperties=docuSignProperties;
 }

, тогда в своем тесте при создании DocuSign вы просто передаете prodSignProj (ваш макет) в качестве параметра

...