我不知道我做错了什么,但我真的很沮丧,并且在与时间赛跑。我有EJB实体派生自数据库,无状态本地会话bean(大多数是外观),它们将这些实体持久存储到使用会话bean的db和托管bean中。
所以我的托管bean看起来像这样:
@ManagedBean
public class SomeBean {
//attributes
@EJB
private SomeSessionBean sb;
// getters and setters and other methods
public void createObject(){
// some logic
sh.method(arguments);
}
}
我需要在我的托管bean中进行一些JUnit mock(最好是使用Mockito)测试。 我还需要在我的会话bean中进行模拟和与db测试的集成。使用Arquillian进行的测试很少(根据我的理解,Arquillian将测试与Jboss服务器集成)
任何人都可以解释或编写一些示例代码,或指向某些网站,但请让它们与我的案例相关吗?
我正在使用NetBeans中的Web应用程序。
答案 0 :(得分:1)
如果您使用setter作为依赖项,那么使用JUnit和Mockito测试您的托管bean很容易。您的示例可能如下所示:
@ManagedBean
public class SomeBean {
private SomeSessionBean sb;
@EJB
public void setSomeSessionBean(SomeSessionBean sb) {
this.sb = sb;
}
public void createObject(Object obj) {
sb.createObject(obj);
}
}
测试看起来像这样:
@RunWith(MockitoJUnitRunner.class)
public class SomeBeanTest {
private SomeBean bean;
@Mock
private SomeSessionBean sb;
@Before
public void setUp() throws Exception {
bean = new SomeBean();
bean.setSomeSessionBean(sb);
}
@Test
public void testCreateObject() throws Exception {
Object obj = new Object();
bean.createObject(obj);
Mockito.verify(sb).createObject(obj);
}
}
正如您所看到的,我在JUnit的@Before方法中初始化托管bean,为所有依赖项设置模拟。在实际测试中,我使用Mockito.verify来验证会话bean上是否调用了createObject
。