2014-01-07 103 views
4

我需要单元测试一个事件监听器的功能,但是我从来没有做过,我似乎无法找到任何有关它的例子。有没有人有任何建议,以一个很好的方式去做到这一点?单元测试事件监听器

+1

什么样的事件监听器? –

+0

它是自己的类(不是匿名的),它实现了一个不属于标准java库的接口(该接口直接扩展了EventListener)。 – endorphins

回答

5

没有多少关系,构建事件侦听器,传入模拟事件并进行测试。当你按照标准模式创建事件侦听器,在这里你定义了直接与含有类交互的匿名类可能出现

@Test 
public void testEventListener() { 
    ActionListener subjectUnderTest = new MyActionListener(); 
    ActionEvent mockEvent = mock(ActionEvent.class); 
    // Or just create a new ActionEvent, e.g. new ActionEvent(); 
    // setup mock 

    subjectUnderTest.actionPerformed(mockEvent); 

    // validate 
} 

问题。然而,将这样的类重构为它自己的完整类并不难,并且将任何依赖关系传递给构造函数,而不是隐式地从周围类中传递。

+0

这可能是一个愚蠢的问题,但我该如何设置模拟事件呢?有没有简单的我可以在标准的Java库中使用来做到这一点,或者它需要外部库? – endorphins

+0

通常,您使用模拟库来执行此操作,但是如果您不想使用它,则可以直接创建事件的实例。我是[Mockito](http://code.google.com/p/mockito/)库的粉丝,非常易于使用。如果您之前没有在单元测试中创建模拟对象,那么您会严重限制您可以运行的测试类型。我推荐[使用TestNG和Mockito的实用单元测试](http://www.amazon.com/Practical-Unit-Testing-TestNG-Mockito/dp/839348930X)作为底层。 – dimo414

+0

我只做了相对简单的单元测试,并不需要模拟对象,但我听说过它。我很欣赏这个指导,我会确保看一下这个底漆。谢谢您的帮助。 – endorphins