我有運行該應用程序時運行良好的類。在Spring Boot中測試時注入MailClient
@Service("bookManager")
public class BookManagerImpl implements BookManager {
private MailClient mailClient;
..
}
@Service
public class MailClient {
protected static final Logger looger = LoggerFactory.getLogger(MailClient.class);
@Autowired
private JavaMailSender mailSender;
private MailContentBuilder mailContentBuilder;
@Autowired
public MailClient(JavaMailSender mailSender, MailContentBuilder mailContentBuilder) {
this.mailSender = mailSender;
this.mailContentBuilder = mailContentBuilder;
}
//TODO: in a properties
public void prepareAndSend(String recipient, String message) {
MimeMessagePreparator messagePreparator = mimeMessage -> {
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);
messageHelper.setFrom("[email protected]");
messageHelper.setTo(recipient);
messageHelper.setSubject("Sample mail subject");
String content = mailContentBuilder.build(message);
messageHelper.setText(content, true);
};
try {
if (looger.isDebugEnabled()) {
looger.debug("sending email to " + recipient);
}
mailSender.send(messagePreparator);
} catch (MailException e) {
looger.error(e.getMessage());
}
}
}
我想創建一個用於測試的ServiceConfig,但我不知道如何將類實例的MailClient因爲沒有默認構造函數和構造的MailClient()是未定義
@Configuration
public class ServiceConfig {
@Bean
public SmsService smsService() {
return new AWSSMSSender();
}
@Bean
public MailClient mailClient() {
return new MailClient();
}
}
使用提出的解決方案:
return new MailClient(null, null) {
@Override
public void prepareAndSend(String recipient, String message)
{
// do nothing
}
};
我得到這個錯誤:
No qualifying bean of type 'org.springframework.mail.javamail.JavaMailSender' available: expected at least 1 bean which qualifies as autowire candidate.
Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
什麼是'MailClient'?它來自哪個庫? – Gregg
爲什麼你爲字段mailSender指定一個額外的@Autowired?我認爲這是多餘的,因爲你已經通過構造函數注入了依賴關係... –
是真的,只是爲了嘗試。沒有它,我得到了相同的錯誤 –