我不知道我在做什么错,但是我真的很沮丧,并且在时间上竞争。我有从数据库派生的EJB实体,无状态的本地 session Bean(其中大多数是Facade),这些实体将这些实体持久化为使用 session Bean的数据库和托管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模拟(最好使用Mockito)测试。
我还需要在 session bean中进行模拟和与db测试的集成。使用Arquillian进行的测试也很少(据我了解,Arquillian将测试与Jboss服务器集成在一起)
谁能解释或编写一些示例代码,或指向某些站点,但请让它们与我的情况相关?
我正在NetBeans中的Web应用程序中工作。
最佳答案
如果您对依赖项使用 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来验证是否在 session bean上调用了
createObject
。
关于jakarta-ee - 托管和 session Bean的模拟和集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8526678/