簡體   English   中英

java-在if語句中調用布爾超時函數,這樣它就不會發送電子郵件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM