Events 在junit中使用Mockito的事件
我试图测试mockito模拟的javax.enterprise.event.event,但引发了以下异常Events 在junit中使用Mockito的事件,events,junit,java-ee-6,mockito,Events,Junit,Java Ee 6,Mockito,我试图测试mockito模拟的javax.enterprise.event.event,但引发了以下异常 Absent Code attribute in method that is not native or abstract in class file javax/enterprise/util/TypeLiteral 这个班看起来像 public class MyClassTest { @Mock Event<MyAlarm> event; //...
Absent Code attribute in method that is not native or abstract in class file javax/enterprise/util/TypeLiteral
这个班看起来像
public class MyClassTest {
@Mock Event<MyAlarm> event;
//...
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
//...
}
@Test
public void myTest() {
MyClass myClass = new MyClass();
myClass.event = event;
//...
verify(event, never()).fire(any(MyAlarm.class));
//...
}
}
公共类MyClassTest{
@模拟事件;
//...
@以前
公共作废设置(){
initMocks(this);
//...
}
@试验
公共无效myTest(){
MyClass MyClass=新的MyClass();
myClass.event=事件;
//...
验证(event,never()).fire(any(MyAlarm.class));
//...
}
}
我将以下内容添加到pom.xml(maven项目)
玻璃鱼
GlassFish Maven仓库
http://maven.glassfish.org/content/groups/glassfish
并在javax(javaeewebapi)依赖项前面嵌入glassfish
<dependency>
<groupId>org.glassfish.extras</groupId>
<artifactId>glassfish-embedded-all</artifactId>
<version>3.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
org.glassfish.extras
玻璃鱼嵌入所有
3.1
测试
爪哇
javaeewebapi
6
罐子
假如
我做错了什么或误解了什么?TypeLiteral中的方法是最终的(请参阅),这意味着Mockito不能对它们进行模拟(请参阅)
也许可以考虑使用(它可以和Mockito一起工作),这显然可以模拟最后的方法 p>我犯了一些小错误。亚当·边的这篇文章为我指明了正确的方向。 我删除了javaeewebapi依赖项,并添加了glassfish-embedded-all依赖项。我的
pom.xml
看起来像:
<!-- .... -->
<dependency>
<groupId>org.glassfish.extras</groupId>
<artifactId>glassfish-embedded-all</artifactId>
<version>3.1.1</version>
<scope>provided</scope>
</dependency>
<!-- <dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>-->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>1.8.5</version>
<scope>test</scope>
<type>jar</type>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
<!-- .... -->
<repositories>
<repository>
<url>http://download.java.net/maven/2/</url>
<id>java.net</id>
<layout>default</layout>
<name>java.net</name>
</repository>
</repositories>
org.glassfish.extras
玻璃鱼嵌入所有
3.1.1
假如
org.mockito
莫基托磁芯
1.8.5
测试
罐子
朱尼特
朱尼特
4.8.2
测试
http://download.java.net/maven/2/
java.net
违约
java.net
这对我来说很好,我可以测试JavaEE事件(或模拟它)。作为一种解决方法,我所做的是在我的测试类中添加一个标记为
@Singleton
的内部类,作为事件观察者。这样的类将如下所示:
@Singleton
public static class MyEventObserver {
MyEvent event;
public void onMyEvent(@Observes MyEvent event) {
this.event = event;
}
}
}
然后在我的测试类中,我注入了这个类:
@Inject MyEventObserver observer;
最后,在测试方法中,我会做一些类似的事情:
Assert.assertNotNull(observer.event);
这对我很有用。当我删除第二个依赖项时,我无法构建我的项目。所有Java EE函数(javax.*)都不再被识别。因此,据我所知,在使用Mockito的类中不可能模拟
javax.enterprise.event.event
。模拟通过提供方法的虚拟实现来工作,但如果这些方法被指定为final,它就不能这样做。
Assert.assertNotNull(observer.event);