[英]java - calling a boolean timeout function in a if statement so it doesn't send email
首先-這是我的代碼的一部分:
public void run() {
try {
_conn = new SmtpConnection(this, _socket);
_state = new SmtpState(_workspace);
_quitting = false;
sendGreetings();
while (!_quitting)
handleCommand();
} catch (SocketTimeoutException ste) {
_conn.send("421 Service shutting down and closing transmission channel");
} catch (Exception e) {
// Closing socket on blocked read
if (!_quitting) {
log.error("Unexpected error handling connection, quitting=", e);
throw new IllegalStateException(e);
}
} finally {
if (null != _state) {
_state.clearMessage();
}
}
}
我在另一個類中也有一個函數,叫做timeoutonemail
public boolean timeoutOnNextEmail()
{
boolean timeout = true;
return timeout;
}
我有一個單元測試,應該嘗試發送電子郵件,但是當我打電話給timeoutfuntion時,測試應該通過-因此它不應發送電子郵件
/* @Test(expected = MailException.class)
public void sendEmailFail() throws MailException {
greenMail.timeoutOnNextEmail();
try {
app.sendMail("to", "from", "subject", "body");
} catch (final MailException e) {
throw new MailException(e.toString());
} catch (InterruptedException e) {
e.printStackTrace();
}
assertEquals(0, greenMail.getReceivedMessagesForDomain("to").length);
}*/
我該如何告訴我的跑步功能,如果我在單元測試中調用timeoutfuntion,那么它應該停止這樣做並讓我的線程進入睡眠狀態。
*/* if(timeout && !_quitting){
greenMail.timeoutOnNextEmail();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
else
{
handleCommand();
}*/*
和幾個不同的選項,但我只是不知道如何正確調用它。
首先,只有擁有線程,您才能擁有想要的行為。
您可以具有要發送的消息隊列。 一個線程將消息放入隊列,而另一個線程將從隊列中獲取消息。 是生產者/消費者的經典問題。
可能存在另一個從隊列中消除消息的代理,或更簡單的是,使用者可以檢查另一個數據結構以了解是否丟棄或處理該消息。
現在,在您的單元測試中,您可以用模擬程序替換使用者,該模擬程序會睡一段固定的時間,以便有時間讓中斷代理采取行動。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.