将 .eml 文件加载到 javax.mail.Messages 中
我正在尝试对处理 javax.mail.Message 实例的方法进行单元测试。
我正在编写一个转换器来更改以不同格式到达的电子邮件,然后将其转换为一致的内部格式(MyMessage
)。此转换通常取决于电子邮件的发件人地址或回复地址,并且创建新的 MyMessage
。
我有一组原始电子邮件,它们在本地保存为 .eml
文件,我想进行一个单元测试,从类路径加载 .eml
文件并将它们转换为 javax.mail.Message 实例。这可能吗?如果可以,该怎么做?
I'm trying to unit test a method which processes javax.mail.Message
instances.
I am writing a converter to change emails which arrive in different formats and are then converted into a consistent internal format (MyMessage
). This conversion will usually depend on the from-address or reply-address of the email, and the parts of the email, the subject, and the from- and reply-addresses will be required for creating the new MyMessage
.
I have a collection of raw emails which are saved locally as .eml
files, and I'd like to make a unit test which loads the .eml
files from the classpath and converts them to javax.mail.Message
instances. Is this possible, and if so, how would it be done?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
经过几次测试后,我终于使用
MimeMessage(Session, InputStream)
公共构造函数(而不是其他响应中引用的基于文件夹的受保护构造函数)成功加载了一条消息。After a few tests, I finally successfully loaded a message using the
MimeMessage(Session, InputStream)
public constructor (as opposed to the Folder-based protected one cited in the other response).我的问题来自于使用 Mockito 来模拟
javax.mail.internet.MimeMessage
的构造函数MimeMessage(Folder, InputStream, int ) 所需的
。这将调用javax.mail.Folder
)javax.mail.Message
Message(Folder, int)
的构造函数,然后访问folder.store.session
。这导致MimeMessage
的构造函数抛出NullPointerException
。解决方案:
这对我来说看起来很难看,所以如果有人有更好的建议,我会很高兴听到。
My problem came from using Mockito to mock the
javax.mail.Folder
required byjavax.mail.internet.MimeMessage
's constructorMimeMessage(Folder, InputStream, int)
. This calls the constructor forjavax.mail.Message
Message(Folder, int)
which then accessesfolder.store.session
. This resulted in aNullPointerException
being thrown by the constructor forMimeMessage
.Solution:
This looks very ugly to me, so if anyone has a better suggestion, I'd be delighted to hear it.