jakarta-ee - 托管和 session Bean的模拟和集成测试

标签 jakarta-ee junit mocking ejb integration

我不知道我在做什么错,但是我真的很沮丧,并且在时间上竞争。我有从数据库派生的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/

相关文章:

java - iText PdfTextExtractor getTextFromPage 异常 "Error reading string at file pointer"

jakarta-ee - CDI 在同一实例中调用拦截器注释方法

eclipse - 停止 Wildfly Windows 服务失败

java - 使用 Gitlab CI 和 Junit 测试媒体播放器

java - 当我的测试失败且 chrome 浏览器关闭之前(@After)时,如何对 chrome 浏览器进行屏幕截图

c# - 使用 Moq 模拟 HttpContext Response.Output

jakarta-ee - 无法像测试 JSF ViewScoped 托管 bean 那样测试 CDI ViewScoped bean

java - @Before/@BeforeClass 似乎不起作用,对象指示为空

java - 使用 soapUI API 创建 soapUI Mock 对象

c# - 模拟 HttpServerUtilityBase