EasyMock and modifing a mutable method parameter

How does one use EasyMock to modify a mocked method's mutable method parameter?

For example, I have class that uses a BlockingQueue. I want to mock the BlockingQueue member for unit testing. My class calls the method queue.drainTo(Collection c). Calling this method removes elements from the queue and adds them to the collection. How would I mock this behavior using EasyMock? Examples would be great.

6
задан Nathan Reese 25 August 2010 в 19:26
поделиться

1 ответ

трудно сказать точно, как выглядит ваш код. Мог бы помочь вам лучше, если бы я знал код, который вы хотите протестировать ... но если предположить, что ваш код, который вы хотите протестировать, выглядит следующим образом:

private BlockingQueue<String> queue;
private List<String>  myList = new ArrayList<String> ():

private void setBlockingQueue( BlockingQueue<String>  queue ) { 
    this.queue = queue;
}

public List<String> getMyList() {
    return myList;
}

public void setMyList( List<String> myList) {
    this.myList = myList;
}

public void doWork() {
    System.out.println("blah");
    queue.drainTo( myList );
}

Тест будет

public void testDoWork() {
    List<String> stuffToDrain = new ArrayList<String>();
    stuffToDrain.add( "foo" );
    stuffToDrain.add( "bar" );
    myTestingClass.setMyList( stuffToTrain );


    BlockingQueue<String> queue = EasyMock.createMock( BlockingQueue.class  );
    myTestingClass.setBlockingQueue( queue );
    queue.drainTo( stuffToDrain );
    EasyMock.replay( queue );
    myTestingClass.doWork();
    EasyMock.verify( queue );



}

Извините, если это не так, но действительно трудно предложить тест для кода, который я не вижу ...

Редактировать - мы не можем утверждать, что изменяемый параметр был изменен из-за того, как мы используем макет. Все, что мы можем сделать, это заявить, что вызывается метод dryTo. Если DrainTo делает то, что мы хотим сделать, то его нужно будет протестировать где-нибудь в другом месте ... то есть в тестах BlockingQueue.class

Edit 2 - мы можем более точно определить, с каким списком мы ожидаем, что метод будет вызван.

0
ответ дан 8 December 2019 в 20:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: