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 的方法以及使用 mockito。给定一个 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
.
编辑:
注意:您可以使用FacesMockitoRunner
JBoss ( https://community.jboss.org/thread/170800 ) 为常见的 JSF 组件完成此操作,并为其他组件使用注释(启用 CDI 的 Java EE 6 作为先决条件这个,但不需要 JBoss 服务器):
在 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 {
使用注解注入常见的 Faces 对象:
@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());
等等