Oracle的这篇文章展示了一种使用JUnit和Mockito“注入”EJB进行测试的方法:http://www.oracle.com/technetwork/articles/java/unittesting-455385.html
编辑:基本上,包含Mockito允许模拟对象,如EntityManager等:
import static org.mockito.Mockito.*;
...
em = mock(EntityManager.class);
他们展示了EJB的方法以及使用mojito的方法。给定一个 EJB:
@Stateless
public class MyResource {
@Inject
Instance<Consultant> company;
@Inject
Event<Result> eventListener;
测试可以“注入”这些对象:
public class MyResourceTest {
private MyResource myr;
@Before
public void initializeDependencies(){
this.myr = new MyResource();
this.myr.company = mock(Instance.class);
this.myr.eventListener = mock(Event.class);
}
请注意,MyResource 和 MyResource 位于同一类路径中,但源文件夹不同,因此您的测试可以访问受保护的字段,以及 。company
eventListener
编辑:
注意:您可以使用来自 JBoss(https://community.jboss.org/thread/170800)为常见的 JSF 组件完成此操作,并对其他组件使用注释(启用了 CDI 的 Java EE 6 作为先决条件,但不需要 JBoss 服务器):FacesMockitoRunner
-
在 maven 中包含 jsf、mockito 和 jsf-mockito 依赖项:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>1.9.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.test-jsf</groupId>
<artifactId>jsf-mockito</artifactId>
<version>1.1.7-SNAPSHOT</version>
<scope>test</scope>
</dependency>
-
将注释添加到测试中:@RunWith
@RunWith(FacesMockitoRunner.class)
public class MyTest {
-
使用注释注入常见的人脸对象:
@Inject
FacesContext facesContext;
@Inject
ExternalContext ext;
@Inject
HttpServletRequest request;
-
使用注释模拟任何其他对象(它似乎在幕后调用它,因此此处可能没有必要):@org.mockito.Mock
FacesMockitoRunner
@Mock MyUserService userService;
@Mock MyFacesBroker broker;
@Mock MyUser user;
-
初始化注入的模拟,使用
@Before public void initMocks() {
// Init the mocks from above
MockitoAnnotations.initMocks(this);
}
-
像往常一样设置测试:
assertSame(FacesContext.getCurrentInstance(), facesContext);
when(ext.getSessionMap()).thenReturn(session);
assertSame(FacesContext.getCurrentInstance().getExternalContext(), ext);
assertSame(FacesContext.getCurrentInstance().getExternalContext().getSessionMap(), ext.getSessionMap());
等。