In my previous blog I explained how to create a stateless bean, how to configure Hibernate model class, Hibernate hbm file and a DAO class for accessing data.
1. Mock HibernateUtil.java
You can use existing HibernateUtil class or mock the class to include custom properties which is needed only for unit testing. A sample given below:
public class MockedHibernateUtil {
private static SessionFactory sessionFactory;
public static SessionFactory getSessionFactory() {
if (null == sessionFactory) {
sessionFactory = new Configuration().configure(
new File("test-hibernate.cfg.xml")).buildSessionFactory();
}
return sessionFactory;
}
}
2. Mocked Service Locator
public class MockedServiceLocator {
public static Object getEjb(String jndiName) throws Exception{
InitialContext initialContext = null;
Properties properties = new Properties();
properties.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.client.LocalInitialContextFactory");
initialContext = new InitialContext(properties);
return initialContext.lookup(jndiName);
}
}
3. Mocker class
public class Mocker {
public static void mockHibernateUtil() {
Mockit.redefineMethods(HibernateUtil.class, MockedHibernateUtil.class);
}
public static void mockServiceLocator() {
Mockit.redefineMethods(ServiceLocator.class, MockedServiceLocator.class);
}
}
4. Test data provider class
public class UserInfoBeanTestDataProvider {
@DataProvider(name = "testUserInfoDataProvider")
public static Object[][] testUserInfoDataProvider() {
return new Object[][] { { "john" }, { "tracy" }, { "leo" } };
}
}
5. Test class
public class HelloBeanTest {
private static InitialContext initialContext;
@BeforeClass
public void setUp() {
Mocker.mockHibernateUtil();
Mocker.mockServiceLocator();
}
@Test(groups = { "usergroup" }, dataProviderClass =
UserInfoBeanTestDataProvider.class, dataProvider = "testUserInfoDataProvider")
public void testGetUserName(String arg) throws NamingException {
Object obj = ServiceLocator.getEjb("jndi.UserInfo");
assert (null != obj) : "obj is null";
UserInfo userInfo = (UserInfo) obj;
Assert.assertNotNull(userInfo.getUserName(arg));
}
@AfterClass
protected void tearDown() {
// clean up
}
}
Go back to Part I

Hi!
ReplyDeleteI'm trying to do the same, but using jUnit 4 instead of TestNG.
Why didn't you use the jMockit Hibernate3Emul to avoid mocking DAOs and the MOR engine? Any special issue?
Regards!