2012-01-30 84 views
1

我想测试我的EJB会话bean如何创建或模拟EJB 3 SessionContext编写JUnit测试用例

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> 

我怎么能在这scneario作为myFacadeBean创建SessionContext是利用sessionContext的访问callerPrincipal()的getName();

我不想用什么样Ejb3unit

回答

0

TestFun-JEE允许你嘲笑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()); 
    } 

}