java—在if语句中调用布尔超时函数,使其不发送电子邮件

fxnxkyjh  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(311)

首先-这是我的部分代码:

  1. public void run() {
  2. try {
  3. _conn = new SmtpConnection(this, _socket);
  4. _state = new SmtpState(_workspace);
  5. _quitting = false;
  6. sendGreetings();
  7. while (!_quitting)
  8. handleCommand();
  9. } catch (SocketTimeoutException ste) {
  10. _conn.send("421 Service shutting down and closing transmission channel");
  11. } catch (Exception e) {
  12. // Closing socket on blocked read
  13. if (!_quitting) {
  14. log.error("Unexpected error handling connection, quitting=", e);
  15. throw new IllegalStateException(e);
  16. }
  17. } finally {
  18. if (null != _state) {
  19. _state.clearMessage();
  20. }
  21. }
  22. }

我在另一个类中还有一个函数,叫做timeoutonemail

  1. public boolean timeoutOnNextEmail()
  2. {
  3. boolean timeout = true;
  4. return timeout;
  5. }

我有一个unittest,它应该尝试发送电子邮件,但是当我调用timeoutfuntion时,测试应该通过-所以它不应该发送电子邮件

  1. /* @Test(expected = MailException.class)
  2. public void sendEmailFail() throws MailException {
  3. greenMail.timeoutOnNextEmail();
  4. try {
  5. app.sendMail("to", "from", "subject", "body");
  6. } catch (final MailException e) {
  7. throw new MailException(e.toString());
  8. } catch (InterruptedException e) {
  9. e.printStackTrace();
  10. }
  11. assertEquals(0, greenMail.getReceivedMessagesForDomain("to").length);
  12. }*/

我如何告诉我的run函数,如果我在unittest中调用timeoutfuntion,那么它应该停止这样做,让我的线程休眠。。我试过类似的方法

  1. * /* if(timeout && !_quitting){
  2. greenMail.timeoutOnNextEmail();
  3. try {
  4. Thread.sleep(1000);
  5. } catch (InterruptedException e) {
  6. e.printStackTrace();
  7. }
  8. }
  9. else
  10. {
  11. handleCommand();
  12. }*/*

还有几个不同的选择,但我不知道怎么正确地称呼它。。

de90aj5v

de90aj5v1#

首先,只有当你有线程的时候,你才能有你想要的行为。
您可以有一个要发送的消息队列。一个线程将消息放入队列,另一个线程将从队列中获取消息。是生产者/消费者的经典问题。
可以有另一个代理从队列中删除消息,或者更简单地说,使用者可以检查另一个数据结构以了解是否丢弃或处理消息。
现在,在您的单元测试中,您可以用一个mock来替换消费者,该mock睡眠一定时间,以便给中断代理时间来执行操作。

相关问题