【发布时间】:2018-01-15 13:50:23
【问题描述】:
我正在编写一个测试(groovy 语言\spock 框架,如果相关)
最初它使我们的应用程序将电子邮件发送到特定的交换(Office 365,如果相关)邮箱。之后我需要登录该邮箱并验证应用程序发送的电子邮件。
我使用 EWS Java API 与 EWS 通信 (com.microsoft.ews-java-api 2.0)
连接到交换服务后,我执行以下操作:
SearchFilter searchFilter = new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, "search string")
Awaitility.await()
.atMost(180, TimeUnit.SECONDS)
.until({
exchangeService.findItems(WellKnownFolderName.Inbox, searchFilter, new ItemView(1)).totalCount > 0
})
这里的Awaitility.await() 本质上是一个动态等待——它重试代码直到满足条件。它可以替换为任何类型的具有线程休眠和中断条件的循环。
在第一次尝试时 findItems 调用从未找到电子邮件 - 通常需要大约一分钟才能发送电子邮件\到达。
问题在于,在任何后续尝试中,findItems 都没有成功找到该项目。但是,如果我在它上面设置一个断点,直到我看到邮箱中的电子邮件 - 它会成功运行。
所以对我来说,一旦搜索失败(没有找到任何东西)再次执行该方法就不会做任何事情。我做错了什么?
【问题讨论】:
-
我看到了同样的问题。如果第一次执行没有返回任何内容,则循环 findItems 调用不会返回任何结果。我刚刚尝试每次都更新 exchangeService,看看这是否可能有助于/防止以某种方式缓存?
标签: office365 exchangewebservices