【发布时间】:2020-02-01 20:39:40
【问题描述】:
我正在尝试将依赖项注入我的班级。但是由于某种原因,当我使用 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);
}
我想知道为什么初始化方法 docuSignProperties 没有实例化。
【问题讨论】:
-
在@before你使用initMocks()
-
不是很相关,但可以提供帮助。现场注入是一种隐藏。如果您使用构造函数注入,那么一切都将一目了然。这也适用于测试和生产代码。
-
MockitoAnnotations.initMocks(this); ?它没有工作;(
-
当你不告诉他这样做时,mockito 应该如何知道将你的模拟注入到
DocuSign中? -
@oitathi 你部分错了。这告诉 Mockito 模拟那个类,但没有告诉它把它注入到
DocuSign。您应该考虑从 Field Injection 切换到 Compiler Injection,例如 Michael Michailidis,然后模拟和测试类缺失的“组合”将变得显而易见。
标签: java spring dependency-injection mockito