- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
执行以下测试后,我看到以下异常。我在代码库中所做的所有更改是使用 MimeMessage
而不是 SimpleMailMessage
。
请指导。
异常
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.ebayenterprise.publicapi.events.webhooks.WebHookMailSenderServiceTest
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 1.548 sec <<< FAILURE! - in com.ebayenterprise.publicapi.events.webhooks.WebHookMailSenderServiceTest
sendNotification(com.ebayenterprise.publicapi.events.webhooks.WebHookMailSenderServiceTest) Time elapsed: 1.159 sec <<< FAILURE!
org.mockito.exceptions.verification.junit.ArgumentsAreDifferent:
Argument(s) are different! Wanted:
mailSender.send(
(hasProperty("from", "sender@abc.com"))
);
-> at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
Actual invocation has different arguments:
mailSender.send(
mimeMessage
);
-> at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option UseSplitVerifier; support was removed in 8.0
Results :
Failed tests:
WebHookMailSenderServiceTest.sendNotification
Argument(s) are different! Wanted:
mailSender.send(
(hasProperty("from", "sender@abc.com"))
);
-> at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
Actual invocation has different arguments:
mailSender.send(
mimeMessage
);
-> at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0
------------------------------------------------------------------------
BUILD FAILURE
------------------------------------------------------------------------
Total time: 10.053 s
Finished at: 2017-09-05T15:24:11-04:00
Final Memory: 19M/318M
------------------------------------------------------------------------
WebHookMailSenderServiceTest.java
public class WebHookMailSenderServiceTest {
@Rule
public MockitoJUnitRule rule = new MockitoJUnitRule(this);
private static final String EMAIL_SUBJECT = "Error Report For Webhooks Job Status";
private static final String EMAIL_RECIPIENT_ADDRESS = "recipient@abc.com";
private static final String EMAIL_RECIPIENT_ADDRESSES = "recipient1@abc.com,recipient2@abc.com";
private static final String EMAIL_SENDER_ADDRESS = "sender@abc.com";
private static final int SUCCESS_ROUTE_ID = 101;
private static final int FAILURE_ROUTE_ID = 201;
private static final String STORE_ID = "TMSUS";
private static final String ENDPOINT = "http://tmsus-endpoint.com/pss";
private static final String EVENT_TYPE = "PaymentSettlementStaus";
private static final int MESSAGES_PROCESSED = 30;
private static final String STATUS = "Success";
private static final String ERROR_MESSAGE = "404 (Not Found)";
private final Map<Integer, WebHookJobStatusCollector> successCollectorMap = new HashMap<>();
private final Map<Integer, WebHookJobStatusCollector> failureCollectorMap = new HashMap<>();
private WebHookMailSenderService webHookMailSenderService;
private WebHookMailSenderService webHookMailSenderServiceWMultiRecipients;
@Mock
private JavaMailSender mailSender;
@Mock
private MimeMessage mimeMessage;
@Before
public void setup() {
webHookMailSenderService = new WebHookMailSenderService(EMAIL_SENDER_ADDRESS, EMAIL_RECIPIENT_ADDRESS, mailSender);
successCollectorMap.put(SUCCESS_ROUTE_ID, new WebHookJobStatusCollector(STORE_ID, ENDPOINT, EVENT_TYPE, MESSAGES_PROCESSED, STATUS, null));
failureCollectorMap.put(FAILURE_ROUTE_ID, new WebHookJobStatusCollector(STORE_ID, ENDPOINT, EVENT_TYPE, MESSAGES_PROCESSED, STATUS, ERROR_MESSAGE));
}
@Test
public void sendNotification() throws MessagingException {
when(mailSender.createMimeMessage()).thenReturn(mimeMessage);
webHookMailSenderService.sendNotification(successCollectorMap, failureCollectorMap);
verify(mailSender).send((MimeMessage) argThat(allOf(
hasProperty("from", equalTo(EMAIL_SENDER_ADDRESS))
)));
}
@After
public void cleanup() {
webHookMailSenderService = null;
assertNull(webHookMailSenderService);
}
}
WebHookMailSenderService.java
public class WebHookMailSenderService {
private static final Logger LOGGER = LoggerFactory.getLogger(WebHookMailSenderService.class);
private static final String EMAIL_SUBJECT = "Error Report For Webhooks Job Status";
private String emailSenderAddress;
private JavaMailSender mailSender;
private String[] emailRecipientAddresses;
private static final FastDateFormat EXECUTION_TIME_DATE_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss Z");
private static final String VELOCITY_TEMPLATE_NAME = "webhooksjobstatus-error-summary.vm";
private static final boolean HTML_FLAG = true;
public WebHookMailSenderService() {
}
public WebHookMailSenderService(String emailSenderAddress, String emailRecipientAddresses, JavaMailSender mailSender) {
this.emailSenderAddress = emailSenderAddress;
this.emailRecipientAddresses = StringUtils.split(emailRecipientAddresses, ',');
this.mailSender = mailSender;
}
public void sendNotification(Map<Integer, WebHookJobStatusCollector> successCollectorMap,
Map<Integer, WebHookJobStatusCollector> failureCollectorMap) throws MessagingException {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message);
helper.setSubject(EMAIL_SUBJECT + " on " + GenericUtil.getHostName());
helper.setFrom(emailSenderAddress);
helper.setTo(emailRecipientAddresses);
String emailContent = getEmailContent2(successCollectorMap, failureCollectorMap);
helper.setText(emailContent, HTML_FLAG);
mailSender.send(message);
}
//code removed for brevity
}
最佳答案
在您的测试中,您提供了一条模拟消息
:
@Mock
private MimeMessage mimeMessage;
when(mailSender.createMimeMessage()).thenReturn(mimeMessage);
生产代码中的内容将被填充,例如:
helper.setFrom(emailSenderAddress);
但是什么也没发生,因为生产代码使用模拟实例,该实例忽略所有 setXXX() 调用。
因此,send()
调用可以处理仍然为空的模拟消息
:
mailSender.send(message);
<小时/>
尝试使用 MimeMessage
的一些 stub 进行测试:
when(mailSender.createMimeMessage()).thenReturn(new MimeMessage(mockedSession));
在这种情况下,MimeMessageHelper 会将数据设置为真实实例,而不是模拟实例。
关于java - 将代码库从 SimpleMailMessage 更改为 MimeMessage 后单元测试中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46062045/
我继承的代码库正在打印电子邮件正文中的一些标题信息。这是正在打印的内容: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Co
所以我有一个电子邮件模板,可以完美地发送没有附件的表单。一直在尝试将附件(从临时存储在文件夹中的服务器中获取它们)添加到要通过电子邮件发送的表单中。 我正在使用 Mail.java 类、emailSe
大家好...我希望有人能给我一些关于我遇到的问题的线索。 阅读 MimeMessage 的 getInputStream() 的 Javadoc,它说“返回此消息内容的已解码输入流”然而,这不是我所经
在我的服务器中,我不断收到来自 gmail 的电子邮件。 我以 MimeMessage 类型接收它们。 我目前所做的是使用以下方法提取正文文本: private String getText(Part
如何在java中使用String创建MimeMessage对象 MimeMultipart multiPart = new MimeMultipart(); 并且需要从字符串对象设置内容 最佳答案 此
我一直在寻找和尝试这个,所以我需要你的帮助。我有一个接收 HTML 电子邮件的服务器。之后,我想获取它的各个部分(标题、主题和正文部分)。获取标题和主题没有问题,但内容却有问题。 这是我获取 Smtp
我在编译应用程序时遇到问题,错误是:不兼容的类型:void 无法转换为 javax.mail.internet.MimeMessage 它出现在这部分代码中: getEmailService().pa
使用javax.mail.*时,我尝试发送一条消息,其内容同时以text/plain和text/html<编码。如何将两种编码添加到 MimeMessage 中? setText 是否会覆盖之前的文本
收到错误“方法尚未实现 mimemessage” 尝试发送电子邮件时 protected static void addAtachments(String[] attachments, Mult
我有一个关于邮件发送的项目并且工作没有问题,但我创建了另一个关于邮件发送的项目,生成的 MimeMessage 无法在第一个项目中解析。 我研究了这些类,发现 MimeMessage 的 header
我对 MIME 消息的内容类型感到困惑。假设我有一条 MIME 消息。这是一个多部分的消息,正文部分是这样的 包含纯文本、html 文本的 Mime 正文部分(如一些字母粗体) 第二个包含附件的 mi
我想实际验证消息上设置的字段,如正文、主题、发件人等……我也尝试过做一个参数捕捉器,但没有用,当我调试代码时,消息是获取 javaMailSender.send(message) 行时始终显示空字段。
try ( FileInputStream input = new FileInputStream(source); FileOutputStream
这是Mail类的代码(里面有一个main,但原因很简单,这样解决这个问题似乎很简单): import javax.mail.Message; import javax.mail.MessagingEx
由于包含 m.saveChanges(),以下测试执行大约需要 5 秒。 import org.junit.Before; import org.junit.Test; import javax
我正在阅读这样的 Mime 消息: InputStream is = new FileInputStream("c:\\Temp\\test.eml");
我正在从本地磁盘读取 eml 文件: InputStream is = new FileInputStream(body_path); MimeMessage message = new MimeMe
我用谷歌搜索了一下,看起来设置电子邮件返回路径的标准方法(以便退回到与发件人不同的地址)是通过 Properties 对象,如下所示: Properties prop = new Properties
从我的 previous question 开始,如果我设置 MimeMessage 的正文,附件、正文部分和所有详细信息都会被删除。我该如何解决这个问题? foreach (MimeKit.Mime
我有一个电子邮件原始来源的文本文件(直接从 gmail 复制,如果您单击“查看原始文件”,您会看到它)。我想读入此文件并将其转换为 MimeMessage。 如果您对原因感到好奇,我已经设置了 Jav
我是一名优秀的程序员,十分优秀!