如何创建或模拟EJB3SessionContext以编写Junit测试用例

如何创建或模拟EJB3SessionContext以编写Junit测试用例,junit,Junit,我正在尝试测试我的ejb会话bean myFacadeBean = new MyFacadeBean(); MyEntity myEntity = myFacadeBean .getMyData("Hello"); 我试图在会话bean中测试一个方法。我已经使用创建了EntityManager entityManager = Persistence.createEntityManagerFactory("Test").createEntityManager(); 我正在测试这些ejb的外部

我正在尝试测试我的ejb会话bean

myFacadeBean = new MyFacadeBean();
MyEntity myEntity = myFacadeBean .getMyData("Hello");
我试图在会话bean中测试一个方法。我已经使用创建了EntityManager

 entityManager = Persistence.createEntityManagerFactory("Test").createEntityManager();
我正在测试这些ejb的外部容器。因此,我将persistence.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
    http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
    version="1.0">
    <persistence-unit name="Test" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>test.entity.MyEntity</class>

        <properties>
            <property name="eclipselink.target-database" value="Oracle" />
            <property name="eclipselink.jdbc.driver" value="oracle.jdbc.OracleDriver" />
            <property name="eclipselink.jdbc.url"
                value="jdbc:oracle:thin:@127.0.0.1:1521:orcl" />
            <property name="eclipselink.jdbc.user" value="user" />
            <property name="eclipselink.jdbc.password" value="pass" />
        </properties>
    </persistence-unit>
</persistence>

org.eclipse.persistence.jpa.PersistenceProvider
test.entity.MyEntity
当myFacadeBean使用SessionContext访问callerPrincipal().getName()时,如何在此scneario中创建SessionContext

我不想使用Ejb3unit之类的东西,它允许您模拟SessionContext,以便确定callerPrincipal().getName()返回的内容

@Local
public interface UserEjb {
    String getCurrentUser();
}

@Stateless
public class UserEjbImpl implements UserEjb{

    @Resource
    private SessionContext sessionContext;

    @Override
    public String getCurrentUser() {
        return sessionContext.getCallerPrincipal().getName();
    }
}

@RunWith(EjbWithMockitoRunner.class)
public class MockSessionContextTest {

    @Mock
    private SessionContext sessionContext;

    @EJB
    private UserEjb userEjb;

    @Test
    public void testSessionContextMock() {
        when(sessionContext.getCallerPrincipal()).thenReturn(new Principal() {
            @Override
            public String getName() {
                return "kuki";
            }
        });

        assertEquals("kuki", userEjb.getCurrentUser());
    }

}