托管和会话bean的模拟和集成测试

时间:2011-12-15 21:13:34

标签: java-ee junit mocking ejb integration

我不知道我做错了什么,但我真的很沮丧,并且在与时间赛跑。我有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应用程序。

1 个答案:

答案 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