用于可运行类和队列的Junit

时间:2018-11-12 16:24:57

标签: java multithreading unit-testing junit

我有一个实现Runnable的Processor类。

第一种方法

Public Processor implements Runnable{

 //"Event" is the name of this queue
 PersistentQueue<Event> persistentQueue = new PersistentQueue<>("Event");

 //add the Event POJO to the persistentQueue
 public void addToQueue(Event, event) {
     persistentQueue.add(event);         
}

persistentQueue用于存储事件POJO

和运行方法

public void run() {
      while (true) {
       if (!persistentQueue.isEmpty()) {

        Event peekEvent = persistantQueue.peek();
        sendRequest(peekEvent);
      }
    }
  }

 public void sendRequest(Event, event){

  // do something to send the event
}

对于第一个addToQueue方法,我编写了测试

public class ProcessorTest {

   private Event event;
   private Processor m_Processor;

  @Before
  public void setup() throws IOException {
  //the Processor class is a singleton
  m_Processor = Processor.getProcessor();
  event = new Event();
 }

  @Test
  public void test(){
   PersistentQueue<Event> persistentQueue = new PersistentQueue<> 
 ("Event");
    m_Processor.addToQueue(event);
    assertEquals(1, persistentQueue.size());
  }
}

但是队列大小是0而不是1。我不知道这是什么问题。我也有关于如何测试运行方法的问题?

1 个答案:

答案 0 :(得分:1)

在您的test方法中,创建了一个与m_Processor实例无关的新队列;它完全没有使用。您需要更改代码,以便获得PersistentQueue实例中包含的m_Processor实例。假设您在getPersistentQueue中有一个名为Processor的getter方法,则可以使用以下方法:

@Test
public void test() {
    m_Processor.addToQueue(event);
    assertEquals(1, m_Processor.getPersistentQueue().size());
}