diff --git a/build.gradle b/build.gradle index 8c0a1b42452..02af542134d 100644 --- a/build.gradle +++ b/build.gradle @@ -71,7 +71,7 @@ configure(allprojects) { project -> testCompile("junit:junit:${junitVersion}") testCompile("org.hamcrest:hamcrest-all:1.3") testCompile("org.mockito:mockito-core:1.9.5") - if (project.name in ["spring", "spring-jms", "spring-orm", + if (project.name in ["spring", "spring-jms", "spring-orm-hibernate4", "spring-oxm", "spring-struts", "spring-test", "spring-test-mvc", "spring-tx", "spring-web", "spring-webmvc", "spring-webmvc-portlet", "spring-webmvc-tiles3"]) { diff --git a/spring-orm/src/test/java/org/springframework/orm/hibernate3/HibernateInterceptorTests.java b/spring-orm/src/test/java/org/springframework/orm/hibernate3/HibernateInterceptorTests.java index ba1415f6402..498005295ea 100644 --- a/spring-orm/src/test/java/org/springframework/orm/hibernate3/HibernateInterceptorTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/hibernate3/HibernateInterceptorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,389 +16,293 @@ package org.springframework.orm.hibernate3; -import java.lang.reflect.AccessibleObject; -import java.lang.reflect.Method; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willThrow; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + import java.sql.SQLException; -import junit.framework.TestCase; -import org.aopalliance.intercept.Interceptor; -import org.aopalliance.intercept.Invocation; import org.aopalliance.intercept.MethodInvocation; -import org.easymock.MockControl; import org.hibernate.FlushMode; import org.hibernate.HibernateException; import org.hibernate.SessionFactory; import org.hibernate.classic.Session; import org.hibernate.exception.ConstraintViolationException; - +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.InOrder; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; import org.springframework.beans.factory.BeanFactory; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.transaction.support.TransactionSynchronizationManager; /** * @author Juergen Hoeller + * @author Phillip Webb * @since 05.03.2005 */ -public class HibernateInterceptorTests extends TestCase { +public class HibernateInterceptorTests { + private SessionFactory sessionFactory; + private Session session; + private MethodInvocation invocation; + + @Before + public void setUp() throws Throwable { + this.sessionFactory = mock(SessionFactory.class); + this.session = mock(Session.class); + this.invocation = mock(MethodInvocation.class); + given(sessionFactory.openSession()).willReturn(session); + given(session.getSessionFactory()).willReturn(sessionFactory); + given(invocation.proceed()).willAnswer(new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + if (!TransactionSynchronizationManager.hasResource(sessionFactory)) { + throw new IllegalStateException("Session not bound"); + } + return null; + } + }); + } + + @After + public void tearDown() { + assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); + assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); + } + + @Test public void testInterceptorWithNewSession() throws HibernateException { - MockControl sfControl = MockControl.createControl(SessionFactory.class); - SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - HibernateInterceptor interceptor = new HibernateInterceptor(); - interceptor.setSessionFactory(sf); + interceptor.setSessionFactory(sessionFactory); try { - interceptor.invoke(new TestInvocation(sf)); + interceptor.invoke(invocation); } catch (Throwable t) { fail("Should not have thrown Throwable: " + t.getMessage()); } - sfControl.verify(); - sessionControl.verify(); + verify(session).flush(); + verify(session).close(); } + @Test public void testInterceptorWithNewSessionAndFlushNever() throws HibernateException { - MockControl sfControl = MockControl.createControl(SessionFactory.class); - SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf); - session.setFlushMode(FlushMode.MANUAL); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - HibernateInterceptor interceptor = new HibernateInterceptor(); interceptor.setFlushModeName("FLUSH_NEVER"); - interceptor.setSessionFactory(sf); + interceptor.setSessionFactory(sessionFactory); try { - interceptor.invoke(new TestInvocation(sf)); + interceptor.invoke(invocation); } catch (Throwable t) { fail("Should not have thrown Throwable: " + t.getMessage()); } - - sfControl.verify(); - sessionControl.verify(); + verify(session).setFlushMode(FlushMode.MANUAL); + verify(session, never()).flush(); + verify(session).close(); } + @Test public void testInterceptorWithNewSessionAndFilter() throws HibernateException { - MockControl sfControl = MockControl.createControl(SessionFactory.class); - SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf); - session.enableFilter("myFilter"); - sessionControl.setReturnValue(null, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - HibernateInterceptor interceptor = new HibernateInterceptor(); - interceptor.setSessionFactory(sf); + interceptor.setSessionFactory(sessionFactory); interceptor.setFilterName("myFilter"); try { - interceptor.invoke(new TestInvocation(sf)); + interceptor.invoke(invocation); } catch (Throwable t) { fail("Should not have thrown Throwable: " + t.getMessage()); } - sfControl.verify(); - sessionControl.verify(); + verify(session).flush(); + verify(session).close(); } + @Test public void testInterceptorWithThreadBound() { - MockControl sfControl = MockControl.createControl(SessionFactory.class); - SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - sfControl.replay(); - sessionControl.replay(); + given(session.isOpen()).willReturn(true); - TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session)); + TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session)); HibernateInterceptor interceptor = new HibernateInterceptor(); - interceptor.setSessionFactory(sf); + interceptor.setSessionFactory(sessionFactory); try { - interceptor.invoke(new TestInvocation(sf)); + interceptor.invoke(invocation); } catch (Throwable t) { fail("Should not have thrown Throwable: " + t.getMessage()); } finally { - TransactionSynchronizationManager.unbindResource(sf); + verify(session, never()).flush(); + verify(session, never()).close(); + TransactionSynchronizationManager.unbindResource(sessionFactory); } - - sfControl.verify(); - sessionControl.verify(); } + @Test public void testInterceptorWithThreadBoundAndFlushEager() throws HibernateException { - MockControl sfControl = MockControl.createControl(SessionFactory.class); - SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO, 1); - session.flush(); - sessionControl.setVoidCallable(1); - sfControl.replay(); - sessionControl.replay(); + given(session.isOpen()).willReturn(true); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); - TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session)); + TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session)); HibernateInterceptor interceptor = new HibernateInterceptor(); interceptor.setFlushMode(HibernateInterceptor.FLUSH_EAGER); - interceptor.setSessionFactory(sf); + interceptor.setSessionFactory(sessionFactory); try { - interceptor.invoke(new TestInvocation(sf)); + interceptor.invoke(invocation); } catch (Throwable t) { fail("Should not have thrown Throwable: " + t.getMessage()); } finally { - TransactionSynchronizationManager.unbindResource(sf); + TransactionSynchronizationManager.unbindResource(sessionFactory); } - sfControl.verify(); - sessionControl.verify(); + verify(session).flush(); } + @Test public void testInterceptorWithThreadBoundAndFlushEagerSwitch() throws HibernateException { - MockControl sfControl = MockControl.createControl(SessionFactory.class); - SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.NEVER, 1); - session.setFlushMode(FlushMode.AUTO); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.setFlushMode(FlushMode.NEVER); - sessionControl.setVoidCallable(1); - sfControl.replay(); - sessionControl.replay(); + given(session.isOpen()).willReturn(true); + given(session.getFlushMode()).willReturn(FlushMode.NEVER); - TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session)); + TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session)); HibernateInterceptor interceptor = new HibernateInterceptor(); interceptor.setFlushMode(HibernateInterceptor.FLUSH_EAGER); - interceptor.setSessionFactory(sf); + interceptor.setSessionFactory(sessionFactory); try { - interceptor.invoke(new TestInvocation(sf)); + interceptor.invoke(invocation); } catch (Throwable t) { fail("Should not have thrown Throwable: " + t.getMessage()); } finally { - TransactionSynchronizationManager.unbindResource(sf); + TransactionSynchronizationManager.unbindResource(sessionFactory); } - sfControl.verify(); - sessionControl.verify(); + InOrder ordered = inOrder(session); + ordered.verify(session).setFlushMode(FlushMode.AUTO); + ordered.verify(session).flush(); + ordered.verify(session).setFlushMode(FlushMode.NEVER); } + @Test public void testInterceptorWithThreadBoundAndFlushCommit() { - MockControl sfControl = MockControl.createControl(SessionFactory.class); - SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO, 1); - session.setFlushMode(FlushMode.COMMIT); - sessionControl.setVoidCallable(1); - session.setFlushMode(FlushMode.AUTO); - sessionControl.setVoidCallable(1); - sfControl.replay(); - sessionControl.replay(); + given(session.isOpen()).willReturn(true); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); - TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session)); + TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session)); HibernateInterceptor interceptor = new HibernateInterceptor(); - interceptor.setSessionFactory(sf); + interceptor.setSessionFactory(sessionFactory); interceptor.setFlushMode(HibernateInterceptor.FLUSH_COMMIT); try { - interceptor.invoke(new TestInvocation(sf)); + interceptor.invoke(invocation); } catch (Throwable t) { fail("Should not have thrown Throwable: " + t.getMessage()); } finally { - TransactionSynchronizationManager.unbindResource(sf); + TransactionSynchronizationManager.unbindResource(sessionFactory); } - sfControl.verify(); - sessionControl.verify(); + InOrder ordered = inOrder(session); + ordered.verify(session).setFlushMode(FlushMode.COMMIT); + ordered.verify(session).setFlushMode(FlushMode.AUTO); + verify(session, never()).flush(); } + @Test public void testInterceptorWithThreadBoundAndFlushAlways() { - MockControl sfControl = MockControl.createControl(SessionFactory.class); - SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO, 1); - session.setFlushMode(FlushMode.ALWAYS); - sessionControl.setVoidCallable(1); - session.setFlushMode(FlushMode.AUTO); - sessionControl.setVoidCallable(1); - sfControl.replay(); - sessionControl.replay(); + given(session.isOpen()).willReturn(true); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); - TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session)); + TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session)); HibernateInterceptor interceptor = new HibernateInterceptor(); - interceptor.setSessionFactory(sf); + interceptor.setSessionFactory(sessionFactory); interceptor.setFlushMode(HibernateInterceptor.FLUSH_ALWAYS); try { - interceptor.invoke(new TestInvocation(sf)); + interceptor.invoke(invocation); } catch (Throwable t) { fail("Should not have thrown Throwable: " + t.getMessage()); } finally { - TransactionSynchronizationManager.unbindResource(sf); + TransactionSynchronizationManager.unbindResource(sessionFactory); } - sfControl.verify(); - sessionControl.verify(); + InOrder ordered = inOrder(session); + ordered.verify(session).setFlushMode(FlushMode.ALWAYS); + ordered.verify(session).setFlushMode(FlushMode.AUTO); + verify(session, never()).flush(); } + @Test public void testInterceptorWithThreadBoundAndFilter() { - MockControl sfControl = MockControl.createControl(SessionFactory.class); - SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.enableFilter("myFilter"); - sessionControl.setReturnValue(null, 1); - session.disableFilter("myFilter"); - sessionControl.setVoidCallable(1); - sfControl.replay(); - sessionControl.replay(); + given(session.isOpen()).willReturn(true); - TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session)); + TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session)); HibernateInterceptor interceptor = new HibernateInterceptor(); - interceptor.setSessionFactory(sf); + interceptor.setSessionFactory(sessionFactory); interceptor.setFilterName("myFilter"); try { - interceptor.invoke(new TestInvocation(sf)); + interceptor.invoke(invocation); } catch (Throwable t) { fail("Should not have thrown Throwable: " + t.getMessage()); } finally { - TransactionSynchronizationManager.unbindResource(sf); + TransactionSynchronizationManager.unbindResource(sessionFactory); } - sfControl.verify(); - sessionControl.verify(); + InOrder ordered = inOrder(session); + ordered.verify(session).enableFilter("myFilter"); + ordered.verify(session).disableFilter("myFilter"); } + @Test public void testInterceptorWithThreadBoundAndFilters() { - MockControl sfControl = MockControl.createControl(SessionFactory.class); - SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.enableFilter("myFilter"); - sessionControl.setReturnValue(null, 1); - session.enableFilter("yourFilter"); - sessionControl.setReturnValue(null, 1); - session.disableFilter("myFilter"); - sessionControl.setVoidCallable(1); - session.disableFilter("yourFilter"); - sessionControl.setVoidCallable(1); - sfControl.replay(); - sessionControl.replay(); + given(session.isOpen()).willReturn(true); - TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session)); + TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session)); HibernateInterceptor interceptor = new HibernateInterceptor(); - interceptor.setSessionFactory(sf); + interceptor.setSessionFactory(sessionFactory); interceptor.setFilterNames(new String[] {"myFilter", "yourFilter"}); try { - interceptor.invoke(new TestInvocation(sf)); + interceptor.invoke(invocation); } catch (Throwable t) { fail("Should not have thrown Throwable: " + t.getMessage()); } finally { - TransactionSynchronizationManager.unbindResource(sf); + TransactionSynchronizationManager.unbindResource(sessionFactory); } - sfControl.verify(); - sessionControl.verify(); + InOrder ordered = inOrder(session); + ordered.verify(session).enableFilter("myFilter"); + ordered.verify(session).enableFilter("yourFilter"); + ordered.verify(session).disableFilter("myFilter"); + ordered.verify(session).disableFilter("yourFilter"); } + @Test public void testInterceptorWithFlushFailure() throws Throwable { - MockControl sfControl = MockControl.createControl(SessionFactory.class); - SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); SQLException sqlEx = new SQLException("argh", "27"); - session.flush(); ConstraintViolationException jdbcEx = new ConstraintViolationException("", sqlEx, null); - sessionControl.setThrowable(jdbcEx, 1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); + willThrow(jdbcEx).given(session).flush(); HibernateInterceptor interceptor = new HibernateInterceptor(); - interceptor.setSessionFactory(sf); + interceptor.setSessionFactory(sessionFactory); try { - interceptor.invoke(new TestInvocation(sf)); + interceptor.invoke(invocation); fail("Should have thrown DataIntegrityViolationException"); } catch (DataIntegrityViolationException ex) { @@ -406,204 +310,72 @@ public class HibernateInterceptorTests extends TestCase { assertEquals(jdbcEx, ex.getCause()); } - sfControl.verify(); - sessionControl.verify(); + verify(session).close(); } + @Test public void testInterceptorWithThreadBoundEmptyHolder() { - MockControl sfControl = MockControl.createControl(SessionFactory.class); - SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - SessionHolder holder = new SessionHolder("key", session); holder.removeSession("key"); - TransactionSynchronizationManager.bindResource(sf, holder); + TransactionSynchronizationManager.bindResource(sessionFactory, holder); HibernateInterceptor interceptor = new HibernateInterceptor(); - interceptor.setSessionFactory(sf); + interceptor.setSessionFactory(sessionFactory); try { - interceptor.invoke(new TestInvocation(sf)); + interceptor.invoke(invocation); } catch (Throwable t) { fail("Should not have thrown Throwable: " + t.getMessage()); } - sfControl.verify(); - sessionControl.verify(); + verify(session).flush(); + verify(session).close(); } + @Test public void testInterceptorWithEntityInterceptor() throws HibernateException { - MockControl interceptorControl = MockControl.createControl(org.hibernate.Interceptor.class); - org.hibernate.Interceptor entityInterceptor = (org.hibernate.Interceptor) interceptorControl.getMock(); - interceptorControl.replay(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - sf.openSession(entityInterceptor); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); + org.hibernate.Interceptor entityInterceptor = mock(org.hibernate.Interceptor.class); + given(sessionFactory.openSession(entityInterceptor)).willReturn(session); HibernateInterceptor interceptor = new HibernateInterceptor(); - interceptor.setSessionFactory(sf); + interceptor.setSessionFactory(sessionFactory); interceptor.setEntityInterceptor(entityInterceptor); try { - interceptor.invoke(new TestInvocation(sf)); + interceptor.invoke(invocation); } catch (Throwable t) { fail("Should not have thrown Throwable: " + t.getMessage()); } - interceptorControl.verify(); - sfControl.verify(); - sessionControl.verify(); + verify(session).flush(); + verify(session).close(); } + @Test public void testInterceptorWithEntityInterceptorBeanName() throws HibernateException { - MockControl interceptorControl = MockControl.createControl(org.hibernate.Interceptor.class); - org.hibernate.Interceptor entityInterceptor = (org.hibernate.Interceptor) interceptorControl.getMock(); - interceptorControl.replay(); - MockControl interceptor2Control = MockControl.createControl(org.hibernate.Interceptor.class); - org.hibernate.Interceptor entityInterceptor2 = (org.hibernate.Interceptor) interceptor2Control.getMock(); - interceptor2Control.replay(); + org.hibernate.Interceptor entityInterceptor = mock(org.hibernate.Interceptor.class); + org.hibernate.Interceptor entityInterceptor2 = mock(org.hibernate.Interceptor.class); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - sf.openSession(entityInterceptor); - sfControl.setReturnValue(session, 1); - sf.openSession(entityInterceptor2); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 2); - session.flush(); - sessionControl.setVoidCallable(2); - session.close(); - sessionControl.setReturnValue(null, 2); - sfControl.replay(); - sessionControl.replay(); + given(sessionFactory.openSession(entityInterceptor)).willReturn(session); + given(sessionFactory.openSession(entityInterceptor2)).willReturn(session); - MockControl beanFactoryControl = MockControl.createControl(BeanFactory.class); - BeanFactory beanFactory = (BeanFactory) beanFactoryControl.getMock(); - beanFactory.getBean("entityInterceptor", org.hibernate.Interceptor.class); - beanFactoryControl.setReturnValue(entityInterceptor, 1); - beanFactory.getBean("entityInterceptor", org.hibernate.Interceptor.class); - beanFactoryControl.setReturnValue(entityInterceptor2, 1); - beanFactoryControl.replay(); + BeanFactory beanFactory = mock(BeanFactory.class); + given(beanFactory.getBean("entityInterceptor", org.hibernate.Interceptor.class)).willReturn( + entityInterceptor, entityInterceptor2); HibernateInterceptor interceptor = new HibernateInterceptor(); - interceptor.setSessionFactory(sf); + interceptor.setSessionFactory(sessionFactory); interceptor.setEntityInterceptorBeanName("entityInterceptor"); interceptor.setBeanFactory(beanFactory); for (int i = 0; i < 2; i++) { try { - interceptor.invoke(new TestInvocation(sf)); + interceptor.invoke(invocation); } catch (Throwable t) { fail("Should not have thrown Throwable: " + t.getMessage()); } } - interceptorControl.verify(); - interceptor2Control.verify(); - sfControl.verify(); - sessionControl.verify(); + verify(session, times(2)).flush(); + verify(session, times(2)).close(); } - - @Override - protected void tearDown() { - assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); - assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); - } - - - private static class TestInvocation implements MethodInvocation { - - private SessionFactory sessionFactory; - - public TestInvocation(SessionFactory sessionFactory) { - this.sessionFactory = sessionFactory; - } - - @Override - public Object proceed() throws Throwable { - if (!TransactionSynchronizationManager.hasResource(this.sessionFactory)) { - throw new IllegalStateException("Session not bound"); - } - return null; - } - - public int getCurrentInterceptorIndex() { - return 0; - } - - public int getNumberOfInterceptors() { - return 0; - } - - public Interceptor getInterceptor(int i) { - return null; - } - - @Override - public Method getMethod() { - return null; - } - - @Override - public AccessibleObject getStaticPart() { - return null; - } - - public Object getArgument(int i) { - return null; - } - - @Override - public Object[] getArguments() { - return null; - } - - public void setArgument(int i, Object handler) { - } - - public int getArgumentCount() { - return 0; - } - - @Override - public Object getThis() { - return null; - } - - public Object getProxy() { - return null; - } - - public Invocation cloneInstance() { - return null; - } - - public void release() { - } - } - } diff --git a/spring-orm/src/test/java/org/springframework/orm/hibernate3/HibernateJtaTransactionTests.java b/spring-orm/src/test/java/org/springframework/orm/hibernate3/HibernateJtaTransactionTests.java index 53d82109288..6f5ef6d62d2 100644 --- a/spring-orm/src/test/java/org/springframework/orm/hibernate3/HibernateJtaTransactionTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/hibernate3/HibernateJtaTransactionTests.java @@ -21,6 +21,14 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willDoNothing; +import static org.mockito.BDDMockito.willThrow; +import static org.mockito.Mockito.atLeastOnce; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; import java.util.ArrayList; import java.util.List; @@ -32,7 +40,6 @@ import javax.transaction.SystemException; import javax.transaction.TransactionManager; import javax.transaction.UserTransaction; -import org.easymock.MockControl; import org.hibernate.FlushMode; import org.hibernate.HibernateException; import org.hibernate.Query; @@ -40,7 +47,9 @@ import org.hibernate.SessionFactory; import org.hibernate.classic.Session; import org.hibernate.engine.SessionFactoryImplementor; import org.hibernate.engine.SessionImplementor; +import org.junit.After; import org.junit.Test; +import org.mockito.InOrder; import org.springframework.dao.DataAccessException; import org.springframework.tests.transaction.MockJtaTransaction; import org.springframework.transaction.TransactionDefinition; @@ -55,11 +64,19 @@ import org.springframework.transaction.support.TransactionTemplate; /** * @author Juergen Hoeller + * @author Phillip Webb * @since 05.03.2005 */ -@SuppressWarnings("deprecation") public class HibernateJtaTransactionTests { + @After + public void tearDown() { + assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); + assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); + assertFalse(TransactionSynchronizationManager.isCurrentTransactionReadOnly()); + assertFalse(TransactionSynchronizationManager.isActualTransactionActive()); + } + @Test public void testJtaTransactionCommit() throws Exception { doTestJtaTransactionCommit(Status.STATUS_NO_TRANSACTION, false); @@ -82,51 +99,25 @@ public class HibernateJtaTransactionTests { @SuppressWarnings({ "rawtypes", "unchecked" }) private void doTestJtaTransactionCommit(int status, final boolean readOnly) throws Exception { - MockControl utControl = MockControl.createControl(UserTransaction.class); - UserTransaction ut = (UserTransaction) utControl.getMock(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - final MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); - final MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - - ut.getStatus(); - utControl.setReturnValue(status, 1); + UserTransaction ut = mock(UserTransaction.class); + final SessionFactory sf = mock(SessionFactory.class); + final Session session = mock(Session.class); + Query query = mock(Query.class); if (status == Status.STATUS_NO_TRANSACTION) { - ut.begin(); - utControl.setVoidCallable(1); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_ACTIVE, 2); - ut.commit(); - utControl.setVoidCallable(1); + given(ut.getStatus()).willReturn(status, Status.STATUS_ACTIVE); } else { - ut.getStatus(); - utControl.setReturnValue(status, 1); + given(ut.getStatus()).willReturn(status); } final List list = new ArrayList(); list.add("test"); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.createQuery("some query string"); - sessionControl.setReturnValue(query, 1); - if (readOnly) { - session.setFlushMode(FlushMode.MANUAL); - sessionControl.setVoidCallable(1); - } - query.list(); - queryControl.setReturnValue(list, 1); - - utControl.replay(); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); + given(sf.openSession()).willReturn(session); + given(session.getSessionFactory()).willReturn(sf); + given(session.isOpen()).willReturn(true); + given(session.createQuery("some query string")).willReturn(query); + given(query.list()).willReturn(list); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); JtaTransactionManager ptm = new JtaTransactionManager(ut); TransactionTemplate tt = new TransactionTemplate(ptm); @@ -163,18 +154,6 @@ public class HibernateJtaTransactionTests { } }); assertTrue("Has thread session", TransactionSynchronizationManager.hasResource(sf)); - sessionControl.verify(); - queryControl.verify(); - sessionControl.reset(); - if (!readOnly) { - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO, 1); - session.flush(); - sessionControl.setVoidCallable(1); - } - session.close(); - sessionControl.setReturnValue(null, 1); - sessionControl.replay(); return htl; } catch (Error err) { @@ -188,9 +167,18 @@ public class HibernateJtaTransactionTests { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - utControl.verify(); - sfControl.verify(); - sessionControl.verify(); + if (status == Status.STATUS_NO_TRANSACTION) { + InOrder ordered = inOrder(ut); + ordered.verify(ut).begin(); + ordered.verify(ut).commit(); + } + + if (readOnly) { + verify(session).setFlushMode(FlushMode.MANUAL); + } else { + verify(session).flush(); + } + verify(session).close(); } @Test @@ -205,40 +193,24 @@ public class HibernateJtaTransactionTests { @SuppressWarnings({ "rawtypes", "unchecked" }) private void doTestJtaTransactionCommitWithJtaTm(int status) throws Exception { - MockControl utControl = MockControl.createControl(UserTransaction.class); - UserTransaction ut = (UserTransaction) utControl.getMock(); - ut.getStatus(); - utControl.setReturnValue(status, 2); + + UserTransaction ut = mock(UserTransaction.class); if (status == Status.STATUS_NO_TRANSACTION) { - ut.begin(); - utControl.setVoidCallable(1); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_ACTIVE, 1); - ut.commit(); - utControl.setVoidCallable(1); + given(ut.getStatus()).willReturn(status, status, Status.STATUS_ACTIVE); + } else { + given(ut.getStatus()).willReturn(status); } - MockControl tmControl = MockControl.createControl(TransactionManager.class); - TransactionManager tm = (TransactionManager) tmControl.getMock(); + TransactionManager tm = mock(TransactionManager.class); MockJtaTransaction transaction = new MockJtaTransaction(); - tm.getTransaction(); - tmControl.setReturnValue(transaction, 6); + given(tm.getTransaction()).willReturn(transaction); - MockControl sfControl = MockControl.createControl(SessionFactoryImplementor.class); - final SessionFactoryImplementor sf = (SessionFactoryImplementor) sfControl.getMock(); - final MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); - sf.getTransactionManager(); - sfControl.setReturnValue(tm, 1); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - - utControl.replay(); - tmControl.replay(); - sfControl.replay(); - sessionControl.replay(); + final SessionFactoryImplementor sf = mock(SessionFactoryImplementor.class); + final Session session = mock(Session.class); + given(sf.getTransactionManager()).willReturn(tm); + given(sf.openSession()).willReturn(session); + given(session.isOpen()).willReturn(true); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); JtaTransactionManager ptm = new JtaTransactionManager(ut); TransactionTemplate tt = new TransactionTemplate(ptm); @@ -278,15 +250,6 @@ public class HibernateJtaTransactionTests { } }); assertTrue("Has thread session", TransactionSynchronizationManager.hasResource(sf)); - sessionControl.verify(); - sessionControl.reset(); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sessionControl.replay(); return htl; } catch (Error err) { @@ -300,38 +263,28 @@ public class HibernateJtaTransactionTests { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - utControl.verify(); - sfControl.verify(); - sessionControl.verify(); + if (status == Status.STATUS_NO_TRANSACTION) { + InOrder ordered = inOrder(ut); + ordered.verify(ut).begin(); + ordered.verify(ut).commit(); + } + verify(session).flush(); + verify(session).close(); } @Test @SuppressWarnings({ "rawtypes", "unchecked" }) public void testJtaTransactionWithFlushFailure() throws Exception { - MockControl utControl = MockControl.createControl(UserTransaction.class); - UserTransaction ut = (UserTransaction) utControl.getMock(); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_NO_TRANSACTION, 1); - ut.begin(); - utControl.setVoidCallable(1); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_ACTIVE, 1); - ut.rollback(); - utControl.setVoidCallable(1); - utControl.replay(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - final MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - sfControl.replay(); - sessionControl.replay(); + UserTransaction ut = mock(UserTransaction.class); + given(ut.getStatus()).willReturn(Status.STATUS_NO_TRANSACTION, Status.STATUS_ACTIVE); + + final SessionFactory sf = mock(SessionFactory.class); + final Session session = mock(Session.class); + given(sf.openSession()).willReturn(session); + given(session.getSessionFactory()).willReturn(sf); + given(session.isOpen()).willReturn(true); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); JtaTransactionManager ptm = new JtaTransactionManager(ut); TransactionTemplate tt = new TransactionTemplate(ptm); @@ -340,6 +293,7 @@ public class HibernateJtaTransactionTests { final HibernateException flushEx = new HibernateException("flush failure"); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); + willThrow(flushEx).given(session).flush(); try { tt.execute(new TransactionCallback() { @@ -373,15 +327,6 @@ public class HibernateJtaTransactionTests { } }); assertTrue("Has thread session", TransactionSynchronizationManager.hasResource(sf)); - sessionControl.verify(); - sessionControl.reset(); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO, 1); - session.flush(); - sessionControl.setThrowable(flushEx); - session.close(); - sessionControl.setReturnValue(null, 1); - sessionControl.replay(); return htl; } catch (Error err) { @@ -399,9 +344,9 @@ public class HibernateJtaTransactionTests { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - utControl.verify(); - sfControl.verify(); - sessionControl.verify(); + verify(ut).begin(); + verify(ut).rollback(); + verify(session).close(); } @Test @@ -416,32 +361,14 @@ public class HibernateJtaTransactionTests { @SuppressWarnings({ "rawtypes", "unchecked" }) private void doTestJtaTransactionRollback(final boolean flush) throws Exception { - MockControl utControl = MockControl.createControl(UserTransaction.class); - UserTransaction ut = (UserTransaction) utControl.getMock(); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_NO_TRANSACTION, 1); - ut.begin(); - utControl.setVoidCallable(1); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_ACTIVE, 1); - ut.rollback(); - utControl.setVoidCallable(1); - utControl.replay(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - final MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - if (flush) { - session.flush(); - sessionControl.setVoidCallable(1); - } - sfControl.replay(); - sessionControl.replay(); + UserTransaction ut = mock(UserTransaction.class); + given(ut.getStatus()).willReturn(Status.STATUS_NO_TRANSACTION, Status.STATUS_ACTIVE); + + final SessionFactory sf = mock(SessionFactory.class); + final Session session = mock(Session.class); + given(sf.openSession()).willReturn(session); + given(session.getSessionFactory()).willReturn(sf); JtaTransactionManager ptm = new JtaTransactionManager(ut); TransactionTemplate tt = new TransactionTemplate(ptm); @@ -450,7 +377,6 @@ public class HibernateJtaTransactionTests { assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); Object result = tt.execute(new TransactionCallback() { - @Override public Object doInTransaction(TransactionStatus status) { try { @@ -468,11 +394,6 @@ public class HibernateJtaTransactionTests { status.flush(); } status.setRollbackOnly(); - sessionControl.verify(); - sessionControl.reset(); - session.close(); - sessionControl.setReturnValue(null, 1); - sessionControl.replay(); return htl; } catch (Error err) { @@ -482,11 +403,15 @@ public class HibernateJtaTransactionTests { } }); assertTrue("Correct result list", result == l); - assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - utControl.verify(); - sfControl.verify(); - sessionControl.verify(); + + InOrder ordered = inOrder(ut); + ordered.verify(ut).begin(); + ordered.verify(ut).rollback(); + if (flush) { + verify(session).flush(); + } + verify(session).close(); } @Test @@ -533,49 +458,22 @@ public class HibernateJtaTransactionTests { protected void doTestJtaTransactionCommitWithPreBound(boolean jtaTm, final boolean flushNever, final boolean readOnly) throws Exception { - MockControl utControl = MockControl.createControl(UserTransaction.class); - UserTransaction ut = (UserTransaction) utControl.getMock(); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_NO_TRANSACTION, 1); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_ACTIVE, 2); - ut.begin(); - utControl.setVoidCallable(1); - ut.commit(); - utControl.setVoidCallable(1); - MockControl tmControl = MockControl.createControl(TransactionManager.class); - TransactionManager tm = (TransactionManager) tmControl.getMock(); + UserTransaction ut = mock(UserTransaction.class); + given(ut.getStatus()).willReturn(Status.STATUS_NO_TRANSACTION, + Status.STATUS_ACTIVE, Status.STATUS_ACTIVE); + + TransactionManager tm = mock(TransactionManager.class); if (jtaTm) { MockJtaTransaction transaction = new MockJtaTransaction(); - tm.getTransaction(); - tmControl.setReturnValue(transaction, 1); + given(tm.getTransaction()).willReturn(transaction); } - MockControl sfControl = MockControl.createControl(SessionFactoryImplementor.class); - final SessionFactoryImplementor sf = (SessionFactoryImplementor) sfControl.getMock(); - final MockControl sessionControl = MockControl.createControl(ExtendedSession.class); - final ExtendedSession session = (ExtendedSession) sessionControl.getMock(); - sf.getTransactionManager(); - sfControl.setReturnValue((jtaTm ? tm : null), 1); - session.isOpen(); - sessionControl.setReturnValue(true, 5); - session.getFlushMode(); - if (flushNever) { - sessionControl.setReturnValue(FlushMode.MANUAL, 1); - if (!readOnly) { - session.setFlushMode(FlushMode.AUTO); - sessionControl.setVoidCallable(1); - } - } - else { - sessionControl.setReturnValue(FlushMode.AUTO, 1); - } - - utControl.replay(); - tmControl.replay(); - sfControl.replay(); - sessionControl.replay(); + final SessionFactoryImplementor sf = mock(SessionFactoryImplementor.class); + final ExtendedSession session = mock(ExtendedSession.class); + given(sf.getTransactionManager()).willReturn(jtaTm ? tm : null); + given(session.isOpen()).willReturn(true); + given(session.getFlushMode()).willReturn(flushNever ? FlushMode.MANUAL: FlushMode.AUTO); TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session)); try { @@ -610,23 +508,6 @@ public class HibernateJtaTransactionTests { }); assertTrue("Has thread session", TransactionSynchronizationManager.hasResource(sf)); } - sessionControl.verify(); - sessionControl.reset(); - if (!readOnly) { - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO, 1); - session.flush(); - sessionControl.setVoidCallable(1); - if (flushNever) { - session.setFlushMode(FlushMode.MANUAL); - sessionControl.setVoidCallable(1); - } - } - session.afterTransactionCompletion(true, null); - sessionControl.setVoidCallable(1); - session.disconnect(); - sessionControl.setReturnValue(null, 1); - sessionControl.replay(); return htl; } catch (Error err) { @@ -644,44 +525,40 @@ public class HibernateJtaTransactionTests { TransactionSynchronizationManager.unbindResource(sf); } - utControl.verify(); - tmControl.verify(); - sfControl.verify(); - sessionControl.verify(); + verify(ut).begin(); + verify(ut).commit(); + + if (flushNever) { + if(!readOnly) { + InOrder ordered = inOrder(session); + ordered.verify(session).setFlushMode(FlushMode.AUTO); + ordered.verify(session).setFlushMode(FlushMode.MANUAL); + } + } + if(!flushNever && !readOnly) { + verify(session).flush(); + } + verify(session).afterTransactionCompletion(true, null); + verify(session).disconnect(); } @Test @SuppressWarnings({ "rawtypes", "unchecked" }) public void testJtaTransactionRollbackWithPreBound() throws Exception { - MockControl utControl = MockControl.createControl(UserTransaction.class); - UserTransaction ut = (UserTransaction) utControl.getMock(); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_NO_TRANSACTION, 1); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_ACTIVE, 2); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_MARKED_ROLLBACK, 2); - ut.begin(); - utControl.setVoidCallable(1); - ut.setRollbackOnly(); - utControl.setVoidCallable(1); - RollbackException rex = new RollbackException(); - ut.commit(); - utControl.setThrowable(rex, 1); - utControl.replay(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - final MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 5); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO, 1); - sfControl.replay(); - sessionControl.replay(); + UserTransaction ut = mock(UserTransaction.class); + given(ut.getStatus()).willReturn(Status.STATUS_NO_TRANSACTION, + Status.STATUS_ACTIVE, Status.STATUS_ACTIVE, + Status.STATUS_MARKED_ROLLBACK, Status.STATUS_MARKED_ROLLBACK); + RollbackException rex = new RollbackException(); + willThrow(rex).given(ut).commit(); + + final SessionFactory sf = mock(SessionFactory.class); + + final Session session = mock(Session.class); + given(session.getSessionFactory()).willReturn(sf); + given(session.isOpen()).willReturn(true); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session)); try { @@ -718,17 +595,6 @@ public class HibernateJtaTransactionTests { }); assertTrue("Has thread session", TransactionSynchronizationManager.hasResource(sf)); } - sessionControl.verify(); - sessionControl.reset(); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.disconnect(); - sessionControl.setReturnValue(null, 1); - session.clear(); - sessionControl.setVoidCallable(1); - sessionControl.replay(); } catch (Error err) { err.printStackTrace(); @@ -748,9 +614,11 @@ public class HibernateJtaTransactionTests { TransactionSynchronizationManager.unbindResource(sf); } - utControl.verify(); - sfControl.verify(); - sessionControl.verify(); + verify(ut).begin(); + verify(ut).setRollbackOnly(); + verify(session).flush(); + verify(session).disconnect(); + verify(session).clear(); } @Test @@ -765,75 +633,29 @@ public class HibernateJtaTransactionTests { @SuppressWarnings({ "rawtypes", "unchecked" }) protected void doTestJtaTransactionWithRequiresNew(final boolean rollback) throws Exception { - MockControl utControl = MockControl.createControl(UserTransaction.class); - UserTransaction ut = (UserTransaction) utControl.getMock(); - MockControl tmControl = MockControl.createControl(TransactionManager.class); - TransactionManager tm = (TransactionManager) tmControl.getMock(); - MockControl tx1Control = MockControl.createControl(javax.transaction.Transaction.class); - javax.transaction.Transaction tx1 = (javax.transaction.Transaction) tx1Control.getMock(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl session1Control = MockControl.createControl(Session.class); - final Session session1 = (Session) session1Control.getMock(); - MockControl session2Control = MockControl.createControl(Session.class); - final Session session2 = (Session) session2Control.getMock(); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_NO_TRANSACTION, 1); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_ACTIVE, 3); - ut.begin(); - utControl.setVoidCallable(2); - tm.suspend(); - tmControl.setReturnValue(tx1, 1); - tm.resume(tx1); - tmControl.setVoidCallable(1); - if (rollback) { - ut.rollback(); - } - else { - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_ACTIVE, 2); - ut.commit(); - } - utControl.setVoidCallable(2); + UserTransaction ut = mock(UserTransaction.class); - sf.openSession(); - sfControl.setReturnValue(session1, 1); - sf.openSession(); - sfControl.setReturnValue(session2, 1); - session1.getSessionFactory(); - session1Control.setReturnValue(sf, 1); - session2.getSessionFactory(); - session2Control.setReturnValue(sf, 1); - session1.isOpen(); - session1Control.setReturnValue(true, 1); - session2.isOpen(); - session2Control.setReturnValue(true, 1); - session2.getFlushMode(); - session2Control.setReturnValue(FlushMode.AUTO, 1); + TransactionManager tm = mock(TransactionManager.class); + javax.transaction.Transaction tx1 = mock(javax.transaction.Transaction.class); + + final SessionFactory sf = mock(SessionFactory.class); + final Session session1 = mock(Session.class); + final Session session2 = mock(Session.class); + + given(ut.getStatus()).willReturn(Status.STATUS_NO_TRANSACTION, + Status.STATUS_ACTIVE, Status.STATUS_ACTIVE, Status.STATUS_ACTIVE, + Status.STATUS_ACTIVE, Status.STATUS_ACTIVE); + given(tm.suspend()).willReturn(tx1); + given(sf.openSession()).willReturn(session1, session2); + given(session1.getSessionFactory()).willReturn(sf); + given(session2.getSessionFactory()).willReturn(sf); + given(session1.isOpen()).willReturn(true); + given(session2.isOpen()).willReturn(true); + given(session2.getFlushMode()).willReturn(FlushMode.AUTO); if (!rollback) { - session1.getFlushMode(); - session1Control.setReturnValue(FlushMode.AUTO, 1); - session2.getFlushMode(); - session2Control.setReturnValue(FlushMode.AUTO, 1); - session1.flush(); - session1Control.setVoidCallable(1); - session2.flush(); - session2Control.setVoidCallable(2); + given(session1.getFlushMode()).willReturn(FlushMode.AUTO); } - session1.disconnect(); - session1Control.setReturnValue(null, 1); - session1.close(); - session1Control.setReturnValue(null, 1); - session2.close(); - session2Control.setReturnValue(null, 1); - - utControl.replay(); - tmControl.replay(); - sfControl.replay(); - session1Control.replay(); - session2Control.replay(); JtaTransactionManager ptm = new JtaTransactionManager(); ptm.setUserTransaction(ut); @@ -893,11 +715,21 @@ public class HibernateJtaTransactionTests { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); } - utControl.verify(); - tmControl.verify(); - sfControl.verify(); - session1Control.verify(); - session2Control.verify(); + verify(ut, times(2)).begin(); + verify(tm).resume(tx1); + if (rollback) { + verify(ut, times(2)).rollback(); + } + else { + verify(ut, times(2)).commit(); + } + verify(session1).disconnect(); + verify(session1).close(); + if(!rollback) { + verify(session1).flush(); + verify(session2, atLeastOnce()).flush(); + } + verify(session2).close(); } @Test @@ -912,51 +744,26 @@ public class HibernateJtaTransactionTests { @SuppressWarnings({ "rawtypes", "unchecked" }) protected void doTestJtaTransactionWithRequiresNewAndException(boolean suspendException) throws Exception { - MockControl utControl = MockControl.createControl(UserTransaction.class); - UserTransaction ut = (UserTransaction) utControl.getMock(); - MockControl tmControl = MockControl.createControl(TransactionManager.class); - TransactionManager tm = (TransactionManager) tmControl.getMock(); - MockControl txControl = MockControl.createControl(javax.transaction.Transaction.class); - javax.transaction.Transaction tx = (javax.transaction.Transaction) txControl.getMock(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl session1Control = MockControl.createControl(Session.class); - final Session session1 = (Session) session1Control.getMock(); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_NO_TRANSACTION, 1); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_ACTIVE, 2); - ut.begin(); - utControl.setVoidCallable(1); + UserTransaction ut = mock(UserTransaction.class); + + TransactionManager tm = mock(TransactionManager.class); + javax.transaction.Transaction tx = mock(javax.transaction.Transaction.class); + + final SessionFactory sf = mock(SessionFactory.class); + final Session session1 = mock(Session.class); + + given(ut.getStatus()).willReturn(Status.STATUS_NO_TRANSACTION, Status.STATUS_ACTIVE, Status.STATUS_ACTIVE); if (suspendException) { - tm.suspend(); - tmControl.setThrowable(new SystemException(), 1); + given(tm.suspend()).willThrow(new SystemException()); } else { - tm.suspend(); - tmControl.setReturnValue(tx, 1); - ut.begin(); - utControl.setThrowable(new SystemException(), 1); - tm.resume(tx); - tmControl.setVoidCallable(1); + given(tm.suspend()).willReturn(tx); + willDoNothing().willThrow(new SystemException()).given(ut).begin(); } - ut.rollback(); - utControl.setVoidCallable(1); - sf.openSession(); - sfControl.setReturnValue(session1, 1); - session1.getSessionFactory(); - session1Control.setReturnValue(sf, 1); - session1.disconnect(); - session1Control.setReturnValue(null, 1); - session1.close(); - session1Control.setReturnValue(null, 1); - - utControl.replay(); - tmControl.replay(); - sfControl.replay(); - session1Control.replay(); + given(sf.openSession()).willReturn(session1); + given(session1.getSessionFactory()).willReturn(sf); JtaTransactionManager ptm = new JtaTransactionManager(); ptm.setUserTransaction(ut); @@ -993,10 +800,13 @@ public class HibernateJtaTransactionTests { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); } - utControl.verify(); - tmControl.verify(); - sfControl.verify(); - session1Control.verify(); + verify(ut, atLeastOnce()).begin(); + if(!suspendException) { + verify(tm).resume(tx); + } + verify(ut).rollback(); + verify(session1).disconnect(); + verify(session1).close(); } @Test @@ -1011,79 +821,30 @@ public class HibernateJtaTransactionTests { @SuppressWarnings({ "rawtypes", "unchecked" }) protected void doTestJtaTransactionWithRequiresNewAndJtaTm(final boolean rollback) throws Exception { - MockControl utControl = MockControl.createControl(UserTransaction.class); - UserTransaction ut = (UserTransaction) utControl.getMock(); - MockControl tmControl = MockControl.createControl(TransactionManager.class); - TransactionManager tm = (TransactionManager) tmControl.getMock(); - MockControl tx1Control = MockControl.createControl(javax.transaction.Transaction.class); - javax.transaction.Transaction tx1 = (javax.transaction.Transaction) tx1Control.getMock(); - MockControl sfControl = MockControl.createControl(SessionFactoryImplementor.class); - final SessionFactoryImplementor sf = (SessionFactoryImplementor) sfControl.getMock(); - MockControl session1Control = MockControl.createControl(Session.class); - final Session session1 = (Session) session1Control.getMock(); - MockControl session2Control = MockControl.createControl(Session.class); - final Session session2 = (Session) session2Control.getMock(); + + UserTransaction ut = mock(UserTransaction.class); + + TransactionManager tm = mock(TransactionManager.class); + javax.transaction.Transaction tx1 = mock(javax.transaction.Transaction.class); + + final SessionFactoryImplementor sf = mock(SessionFactoryImplementor.class); + final Session session1 = mock(Session.class); + final Session session2 = mock(Session.class); MockJtaTransaction transaction1 = new MockJtaTransaction(); MockJtaTransaction transaction2 = new MockJtaTransaction(); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_NO_TRANSACTION, 1); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_ACTIVE, 3); - ut.begin(); - utControl.setVoidCallable(2); - tm.getTransaction(); - tmControl.setReturnValue(transaction1, 1); - tm.suspend(); - tmControl.setReturnValue(tx1, 1); - tm.getTransaction(); - tmControl.setReturnValue(transaction2, 1); - tm.resume(tx1); - tmControl.setVoidCallable(1); - if (rollback) { - ut.rollback(); - } - else { - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_ACTIVE, 2); - ut.commit(); - } - utControl.setVoidCallable(2); - - sf.getTransactionManager(); - sfControl.setReturnValue(tm, 2); - sf.openSession(); - sfControl.setReturnValue(session1, 1); - sf.openSession(); - sfControl.setReturnValue(session2, 1); - session1.isOpen(); - session1Control.setReturnValue(true, 1); - session2.isOpen(); - session2Control.setReturnValue(true, 1); - session2.getFlushMode(); - session2Control.setReturnValue(FlushMode.AUTO, 1); - if (!rollback) { - session1.getFlushMode(); - session1Control.setReturnValue(FlushMode.AUTO, 1); - session2.getFlushMode(); - session2Control.setReturnValue(FlushMode.AUTO, 1); - session1.flush(); - session1Control.setVoidCallable(1); - session2.flush(); - session2Control.setVoidCallable(2); - } - session1.disconnect(); - session1Control.setReturnValue(null, 1); - session1.close(); - session1Control.setReturnValue(null, 1); - session2.close(); - session2Control.setReturnValue(null, 1); - - utControl.replay(); - tmControl.replay(); - sfControl.replay(); - session1Control.replay(); - session2Control.replay(); + given(ut.getStatus()).willReturn(Status.STATUS_NO_TRANSACTION, + Status.STATUS_ACTIVE, Status.STATUS_ACTIVE, Status.STATUS_ACTIVE, + Status.STATUS_ACTIVE, Status.STATUS_ACTIVE); + given(tm.getTransaction()).willReturn(transaction1); + given(tm.suspend()).willReturn(tx1); + given(tm.getTransaction()).willReturn(transaction2); + given(sf.getTransactionManager()).willReturn(tm); + given(sf.openSession()).willReturn(session1, session2); + given(session1.isOpen()).willReturn(true); + given(session2.isOpen()).willReturn(true); + given(session1.getFlushMode()).willReturn(FlushMode.AUTO); + given(session2.getFlushMode()).willReturn(FlushMode.AUTO); JtaTransactionManager ptm = new JtaTransactionManager(); ptm.setUserTransaction(ut); @@ -1143,51 +904,34 @@ public class HibernateJtaTransactionTests { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); } - utControl.verify(); - tmControl.verify(); - sfControl.verify(); - session1Control.verify(); - session2Control.verify(); + verify(ut, times(2)).begin(); + verify(tm).resume(tx1); + if (rollback) { + verify(ut, times(2)).rollback(); + } + else { + verify(ut, times(2)).commit(); + verify(session1).flush(); + verify(session2, times(2)).flush(); + } + verify(session1).disconnect(); + verify(session1).close(); + verify(session2).close(); } @Test @SuppressWarnings({ "rawtypes", "unchecked" }) public void testTransactionWithPropagationSupports() throws Exception { - MockControl utControl = MockControl.createControl(UserTransaction.class); - UserTransaction ut = (UserTransaction) utControl.getMock(); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_NO_TRANSACTION, 1); - ut.begin(); - utControl.setVoidCallable(1); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_ACTIVE, 1); - ut.rollback(); - utControl.setVoidCallable(1); - utControl.replay(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); + UserTransaction ut = mock(UserTransaction.class); + given(ut.getStatus()).willReturn(Status.STATUS_NO_TRANSACTION, Status.STATUS_ACTIVE); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.MANUAL, 1); - session.setFlushMode(FlushMode.AUTO); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.setFlushMode(FlushMode.MANUAL); - sessionControl.setVoidCallable(1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.MANUAL, 1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); + final SessionFactory sf = mock(SessionFactory.class); + final Session session = mock(Session.class); + + given(sf.openSession()).willReturn(session); + given(session.getSessionFactory()).willReturn(sf); + given(session.getFlushMode()).willReturn(FlushMode.MANUAL); JtaTransactionManager tm = new JtaTransactionManager(ut); TransactionTemplate tt = new TransactionTemplate(tm); @@ -1217,44 +961,27 @@ public class HibernateJtaTransactionTests { }); assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); - sfControl.verify(); - sessionControl.verify(); + InOrder ordered = inOrder(session); + ordered.verify(session).setFlushMode(FlushMode.AUTO); + ordered.verify(session).flush(); + ordered.verify(session).setFlushMode(FlushMode.MANUAL); + ordered.verify(session).close(); } @Test @SuppressWarnings({ "rawtypes", "unchecked" }) public void testTransactionWithPropagationSupportsAndInnerTransaction() throws Exception { - MockControl utControl = MockControl.createControl(UserTransaction.class); - UserTransaction ut = (UserTransaction) utControl.getMock(); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_NO_TRANSACTION, 1); - ut.begin(); - utControl.setVoidCallable(1); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_ACTIVE, 1); - ut.rollback(); - utControl.setVoidCallable(1); - utControl.replay(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); + UserTransaction ut = mock(UserTransaction.class); + given(ut.getStatus()).willReturn(Status.STATUS_NO_TRANSACTION, Status.STATUS_ACTIVE); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO, 3); - session.flush(); - sessionControl.setVoidCallable(3); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); + final SessionFactory sf = mock(SessionFactory.class); + final Session session = mock(Session.class); + + given(sf.openSession()).willReturn(session); + given(session.getSessionFactory()).willReturn(sf); + given(session.isOpen()).willReturn(true); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); JtaTransactionManager tm = new JtaTransactionManager(ut); TransactionTemplate tt = new TransactionTemplate(tm); @@ -1304,40 +1031,23 @@ public class HibernateJtaTransactionTests { } }); assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); - - sfControl.verify(); - sessionControl.verify(); + verify(session, times(3)).flush(); + verify(session).close(); } @Test @SuppressWarnings("rawtypes") public void testJtaSessionSynchronization() throws Exception { - MockControl tmControl = MockControl.createControl(TransactionManager.class); - TransactionManager tm = (TransactionManager) tmControl.getMock(); + + TransactionManager tm = mock(TransactionManager.class); MockJtaTransaction transaction = new MockJtaTransaction(); - tm.getTransaction(); - tmControl.setReturnValue(transaction, 6); - - MockControl sfControl = MockControl.createControl(SessionFactoryImplementor.class); - final SessionFactoryImplementor sf = (SessionFactoryImplementor) sfControl.getMock(); - final MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - sf.getTransactionManager(); - sfControl.setReturnValue(tm, 6); - session.isOpen(); - sessionControl.setReturnValue(true, 4); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - - tmControl.replay(); - sfControl.replay(); - sessionControl.replay(); + given(tm.getTransaction()).willReturn(transaction); + final SessionFactoryImplementor sf = mock(SessionFactoryImplementor.class); + final Session session = mock(Session.class); + given(sf.openSession()).willReturn(session); + given(sf.getTransactionManager()).willReturn(tm); + given(session.isOpen()).willReturn(true); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); HibernateTemplate ht = new HibernateTemplate(sf); @@ -1362,36 +1072,22 @@ public class HibernateJtaTransactionTests { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - tmControl.verify(); - sfControl.verify(); - sessionControl.verify(); + verify(session).flush(); + verify(session).close(); } @Test @SuppressWarnings("rawtypes") public void testJtaSessionSynchronizationWithRollback() throws Exception { - MockControl tmControl = MockControl.createControl(TransactionManager.class); - TransactionManager tm = (TransactionManager) tmControl.getMock(); + + TransactionManager tm = mock(TransactionManager.class); MockJtaTransaction transaction = new MockJtaTransaction(); - tm.getTransaction(); - tmControl.setReturnValue(transaction, 6); - - MockControl sfControl = MockControl.createControl(SessionFactoryImplementor.class); - final SessionFactoryImplementor sf = (SessionFactoryImplementor) sfControl.getMock(); - final MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - sf.getTransactionManager(); - sfControl.setReturnValue(tm, 6); - session.isOpen(); - sessionControl.setReturnValue(true, 4); - session.close(); - sessionControl.setReturnValue(null, 1); - - tmControl.replay(); - sfControl.replay(); - sessionControl.replay(); + given(tm.getTransaction()).willReturn(transaction); + final SessionFactoryImplementor sf = mock(SessionFactoryImplementor.class); + final Session session = mock(Session.class); + given(sf.openSession()).willReturn(session); + given(sf.getTransactionManager()).willReturn(tm); + given(session.isOpen()).willReturn(true); assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); HibernateTemplate ht = new HibernateTemplate(sf); @@ -1415,40 +1111,22 @@ public class HibernateJtaTransactionTests { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - tmControl.verify(); - sfControl.verify(); - sessionControl.verify(); + verify(session).close(); } @Test @SuppressWarnings("rawtypes") public void testJtaSessionSynchronizationWithRollbackByOtherThread() throws Exception { - MockControl tmControl = MockControl.createControl(TransactionManager.class); - TransactionManager tm = (TransactionManager) tmControl.getMock(); + + TransactionManager tm = mock(TransactionManager.class); MockJtaTransaction transaction = new MockJtaTransaction(); - tm.getTransaction(); - tmControl.setReturnValue(transaction, 7); - tm.getStatus(); - tmControl.setReturnValue(Status.STATUS_NO_TRANSACTION, 1); - - MockControl sfControl = MockControl.createControl(SessionFactoryImplementor.class); - final SessionFactoryImplementor sf = (SessionFactoryImplementor) sfControl.getMock(); - final MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); - sf.openSession(); - sfControl.setReturnValue(session, 2); - sf.getTransactionManager(); - sfControl.setReturnValue(tm, 7); - session.isOpen(); - sessionControl.setReturnValue(true, 8); - session.setFlushMode(FlushMode.MANUAL); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 2); - - tmControl.replay(); - sfControl.replay(); - sessionControl.replay(); + given(tm.getTransaction()).willReturn(transaction); + given(tm.getStatus()).willReturn(Status.STATUS_NO_TRANSACTION); + final SessionFactoryImplementor sf = mock(SessionFactoryImplementor.class); + final Session session = mock(Session.class); + given(sf.openSession()).willReturn(session); + given(sf.getTransactionManager()).willReturn(tm); + given(session.isOpen()).willReturn(true); assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); final HibernateTemplate ht = new HibernateTemplate(sf); @@ -1505,43 +1183,25 @@ public class HibernateJtaTransactionTests { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - tmControl.verify(); - sfControl.verify(); - sessionControl.verify(); + verify(session).setFlushMode(FlushMode.MANUAL); + verify(session, times(2)).close(); } @Test @SuppressWarnings("rawtypes") public void testJtaSessionSynchronizationWithFlushFailure() throws Exception { - MockControl tmControl = MockControl.createControl(TransactionManager.class); - TransactionManager tm = (TransactionManager) tmControl.getMock(); + + TransactionManager tm = mock(TransactionManager.class); MockJtaTransaction transaction = new MockJtaTransaction(); - tm.getTransaction(); - tmControl.setReturnValue(transaction, 6); - tm.setRollbackOnly(); - tmControl.setVoidCallable(1); - + given(tm.getTransaction()).willReturn(transaction); final HibernateException flushEx = new HibernateException("flush failure"); - MockControl sfControl = MockControl.createControl(SessionFactoryImplementor.class); - final SessionFactoryImplementor sf = (SessionFactoryImplementor) sfControl.getMock(); - final MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - sf.getTransactionManager(); - sfControl.setReturnValue(tm, 6); - session.isOpen(); - sessionControl.setReturnValue(true, 4); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO, 1); - session.flush(); - sessionControl.setThrowable(flushEx, 1); - session.close(); - sessionControl.setReturnValue(null, 1); - - tmControl.replay(); - sfControl.replay(); - sessionControl.replay(); + final SessionFactoryImplementor sf = mock(SessionFactoryImplementor.class); + final Session session = mock(Session.class); + given(sf.openSession()).willReturn(session); + given(sf.getTransactionManager()).willReturn(tm); + given(session.isOpen()).willReturn(true); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + willThrow(flushEx).given(session).flush(); assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); HibernateTemplate ht = new HibernateTemplate(sf); @@ -1572,52 +1232,27 @@ public class HibernateJtaTransactionTests { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - tmControl.verify(); - sfControl.verify(); - sessionControl.verify(); + verify(tm).setRollbackOnly(); + verify(session).close(); } @Test @SuppressWarnings("rawtypes") public void testJtaSessionSynchronizationWithSuspendedTransaction() throws Exception { - MockControl tmControl = MockControl.createControl(TransactionManager.class); - TransactionManager tm = (TransactionManager) tmControl.getMock(); + + TransactionManager tm = mock(TransactionManager.class); MockJtaTransaction transaction1 = new MockJtaTransaction(); MockJtaTransaction transaction2 = new MockJtaTransaction(); - tm.getTransaction(); - tmControl.setReturnValue(transaction1, 2); - tm.getTransaction(); - tmControl.setReturnValue(transaction2, 3); + given(tm.getTransaction()).willReturn(transaction1, transaction1, transaction2, transaction2, + transaction2); - MockControl sfControl = MockControl.createControl(SessionFactoryImplementor.class); - final SessionFactoryImplementor sf = (SessionFactoryImplementor) sfControl.getMock(); - final MockControl session1Control = MockControl.createControl(Session.class); - final Session session1 = (Session) session1Control.getMock(); - final MockControl session2Control = MockControl.createControl(Session.class); - final Session session2 = (Session) session2Control.getMock(); - sf.openSession(); - sfControl.setReturnValue(session1, 1); - sf.openSession(); - sfControl.setReturnValue(session2, 1); - sf.getTransactionManager(); - sfControl.setReturnValue(tm, 5); - session1.getFlushMode(); - session1Control.setReturnValue(FlushMode.AUTO, 1); - session2.getFlushMode(); - session2Control.setReturnValue(FlushMode.AUTO, 1); - session1.flush(); - session1Control.setVoidCallable(1); - session2.flush(); - session2Control.setVoidCallable(1); - session1.close(); - session1Control.setReturnValue(null, 1); - session2.close(); - session2Control.setReturnValue(null, 1); - - tmControl.replay(); - sfControl.replay(); - session1Control.replay(); - session2Control.replay(); + final SessionFactoryImplementor sf = mock(SessionFactoryImplementor.class); + final Session session1 = mock(Session.class); + final Session session2 = mock(Session.class); + given(sf.openSession()).willReturn(session1, session2); + given(sf.getTransactionManager()).willReturn(tm); + given(session1.getFlushMode()).willReturn(FlushMode.AUTO); + given(session2.getFlushMode()).willReturn(FlushMode.AUTO); assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); HibernateTemplate ht = new HibernateTemplate(sf); @@ -1654,46 +1289,27 @@ public class HibernateJtaTransactionTests { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - tmControl.verify(); - sfControl.verify(); - session1Control.verify(); - session2Control.verify(); + verify(session1).flush(); + verify(session2).flush(); + verify(session1).close(); + verify(session2).close(); } @Test @SuppressWarnings("rawtypes") public void testJtaSessionSynchronizationWithNonSessionFactoryImplementor() throws Exception { - MockControl tmControl = MockControl.createControl(TransactionManager.class); - TransactionManager tm = (TransactionManager) tmControl.getMock(); + + TransactionManager tm = mock(TransactionManager.class); MockJtaTransaction transaction = new MockJtaTransaction(); - tm.getTransaction(); - tmControl.setReturnValue(transaction, 6); - - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - final MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); - MockControl sfiControl = MockControl.createControl(SessionFactoryImplementor.class); - final SessionFactoryImplementor sfi = (SessionFactoryImplementor) sfiControl.getMock(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sfi, 6); - sfi.getTransactionManager(); - sfiControl.setReturnValue(tm, 6); - session.isOpen(); - sessionControl.setReturnValue(true, 4); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - - tmControl.replay(); - sfControl.replay(); - sessionControl.replay(); - sfiControl.replay(); + given(tm.getTransaction()).willReturn(transaction); + final SessionFactory sf = mock(SessionFactory.class); + final Session session = mock(Session.class); + final SessionFactoryImplementor sfi = mock(SessionFactoryImplementor.class); + given(sf.openSession()).willReturn(session); + given(session.getSessionFactory()).willReturn(sfi); + given(sfi.getTransactionManager()).willReturn(tm); + given(session.isOpen()).willReturn(true); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); HibernateTemplate ht = new HibernateTemplate(sf); @@ -1718,46 +1334,25 @@ public class HibernateJtaTransactionTests { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - tmControl.verify(); - sfControl.verify(); - sessionControl.verify(); - sfiControl.verify(); + verify(session).flush(); + verify(session).close(); } @Test @SuppressWarnings("rawtypes") public void testJtaSessionSynchronizationWithSpringTransactionLaterOn() throws Exception { - MockControl utControl = MockControl.createControl(UserTransaction.class); - UserTransaction ut = (UserTransaction) utControl.getMock(); - MockControl tmControl = MockControl.createControl(TransactionManager.class); - TransactionManager tm = (TransactionManager) tmControl.getMock(); + UserTransaction ut = mock(UserTransaction.class); + + TransactionManager tm = mock(TransactionManager.class); MockJtaTransaction transaction = new MockJtaTransaction(); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_ACTIVE, 1); - tm.getTransaction(); - tmControl.setReturnValue(transaction, 6); - - MockControl sfControl = MockControl.createControl(SessionFactoryImplementor.class); - final SessionFactoryImplementor sf = (SessionFactoryImplementor) sfControl.getMock(); - final MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - sf.getTransactionManager(); - sfControl.setReturnValue(tm, 6); - session.isOpen(); - sessionControl.setReturnValue(true, 4); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - - utControl.replay(); - tmControl.replay(); - sfControl.replay(); - sessionControl.replay(); + given(ut.getStatus()).willReturn(Status.STATUS_ACTIVE); + given(tm.getTransaction()).willReturn(transaction); + final SessionFactoryImplementor sf = mock(SessionFactoryImplementor.class); + final Session session = mock(Session.class); + given(sf.openSession()).willReturn(session); + given(sf.getTransactionManager()).willReturn(tm); + given(session.isOpen()).willReturn(true); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); final HibernateTemplate ht = new HibernateTemplate(sf); @@ -1801,10 +1396,8 @@ public class HibernateJtaTransactionTests { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - utControl.verify(); - tmControl.verify(); - sfControl.verify(); - sessionControl.verify(); + verify(session).flush(); + verify(session).close(); } @Test @@ -1819,34 +1412,21 @@ public class HibernateJtaTransactionTests { @SuppressWarnings("rawtypes") private void doTestJtaSessionSynchronizationWithPreBound(boolean flushNever) throws Exception { - MockControl tmControl = MockControl.createControl(TransactionManager.class); - TransactionManager tm = (TransactionManager) tmControl.getMock(); - MockJtaTransaction transaction = new MockJtaTransaction(); - tm.getTransaction(); - tmControl.setReturnValue(transaction, 6); - MockControl sfControl = MockControl.createControl(SessionFactoryImplementor.class); - final SessionFactoryImplementor sf = (SessionFactoryImplementor) sfControl.getMock(); - final MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); - sf.getTransactionManager(); - sfControl.setReturnValue(tm, 6); - session.isOpen(); - sessionControl.setReturnValue(true, 5); - session.getFlushMode(); + TransactionManager tm = mock(TransactionManager.class); + MockJtaTransaction transaction = new MockJtaTransaction(); + given(tm.getTransaction()).willReturn(transaction); + final SessionFactoryImplementor sf = mock(SessionFactoryImplementor.class); + final Session session = mock(Session.class); + given(sf.getTransactionManager()).willReturn(tm); + given(session.isOpen()).willReturn(true); if (flushNever) { - sessionControl.setReturnValue(FlushMode.MANUAL, 1); - session.setFlushMode(FlushMode.AUTO); - sessionControl.setVoidCallable(1); + given(session.getFlushMode()).willReturn(FlushMode.MANUAL, FlushMode.AUTO, FlushMode.MANUAL); } else { - sessionControl.setReturnValue(FlushMode.AUTO, 1); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); } - tmControl.replay(); - sfControl.replay(); - sessionControl.replay(); - assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session)); try { @@ -1865,20 +1445,6 @@ public class HibernateJtaTransactionTests { }); } - sessionControl.verify(); - sessionControl.reset(); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO, 1); - session.flush(); - sessionControl.setVoidCallable(1); - if (flushNever) { - session.setFlushMode(FlushMode.MANUAL); - sessionControl.setVoidCallable(1); - } - session.disconnect(); - sessionControl.setReturnValue(null, 1); - sessionControl.replay(); - Synchronization synchronization = transaction.getSynchronization(); assertTrue("JTA synchronization registered", synchronization != null); synchronization.beforeCompletion(); @@ -1890,47 +1456,31 @@ public class HibernateJtaTransactionTests { } assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); - tmControl.verify(); - sfControl.verify(); - sessionControl.verify(); + InOrder ordered = inOrder(session); + if(flushNever) { + ordered.verify(session).setFlushMode(FlushMode.AUTO); + ordered.verify(session).setFlushMode(FlushMode.MANUAL); + } else { + ordered.verify(session).flush(); + } + ordered.verify(session).disconnect(); } @Test @SuppressWarnings("rawtypes") public void testJtaSessionSynchronizationWithRemoteTransaction() throws Exception { - MockControl tmControl = MockControl.createControl(TransactionManager.class); - TransactionManager tm = (TransactionManager) tmControl.getMock(); - MockJtaTransaction transaction = new MockJtaTransaction(); - MockControl sfControl = MockControl.createControl(SessionFactoryImplementor.class); - final SessionFactoryImplementor sf = (SessionFactoryImplementor) sfControl.getMock(); - final MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); + TransactionManager tm = mock(TransactionManager.class); + MockJtaTransaction transaction = new MockJtaTransaction(); + final SessionFactoryImplementor sf = mock(SessionFactoryImplementor.class); + final Session session = mock(Session.class); + given(tm.getTransaction()).willReturn(transaction); + given(sf.openSession()).willReturn(session); + given(sf.getTransactionManager()).willReturn(tm); + given(session.isOpen()).willReturn(true); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); for (int j = 0; j < 2; j++) { - tmControl.reset(); - sfControl.reset(); - sessionControl.reset(); - - tm.getTransaction(); - tmControl.setReturnValue(transaction, 6); - - sf.openSession(); - sfControl.setReturnValue(session, 1); - sf.getTransactionManager(); - sfControl.setReturnValue(tm, 6); - session.isOpen(); - sessionControl.setReturnValue(true, 4); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - - tmControl.replay(); - sfControl.replay(); - sessionControl.replay(); if (j == 0) { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); @@ -1975,23 +1525,13 @@ public class HibernateJtaTransactionTests { SessionHolder sessionHolder = (SessionHolder) TransactionSynchronizationManager.getResource(sf); assertTrue("Thread session holder empty", sessionHolder.isEmpty()); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - - tmControl.verify(); - sfControl.verify(); - sessionControl.verify(); } + verify(session, times(2)).flush(); + verify(session, times(2)).close(); TransactionSynchronizationManager.unbindResource(sf); } - protected void tearDown() { - assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); - assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); - assertFalse(TransactionSynchronizationManager.isCurrentTransactionReadOnly()); - assertFalse(TransactionSynchronizationManager.isActualTransactionActive()); - } - - /** * Interface that combines Hibernate's Session and SessionImplementor * interface. Necessary for creating a mock that implements both interfaces. diff --git a/spring-orm/src/test/java/org/springframework/orm/hibernate3/HibernateTemplateTests.java b/spring-orm/src/test/java/org/springframework/orm/hibernate3/HibernateTemplateTests.java index a9ef28ff592..fd1ae832b38 100644 --- a/spring-orm/src/test/java/org/springframework/orm/hibernate3/HibernateTemplateTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/hibernate3/HibernateTemplateTests.java @@ -16,6 +16,20 @@ package org.springframework.orm.hibernate3; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotSame; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.BDDMockito.given; +import static org.mockito.Matchers.same; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.verify; + import java.lang.reflect.Proxy; import java.sql.Connection; import java.sql.SQLException; @@ -24,8 +38,6 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; -import junit.framework.TestCase; -import org.easymock.MockControl; import org.hibernate.Criteria; import org.hibernate.Filter; import org.hibernate.FlushMode; @@ -54,152 +66,123 @@ import org.hibernate.exception.GenericJDBCException; import org.hibernate.exception.JDBCConnectionException; import org.hibernate.exception.LockAcquisitionException; import org.hibernate.exception.SQLGrammarException; - -import org.springframework.tests.sample.beans.TestBean; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.InOrder; import org.springframework.dao.CannotAcquireLockException; import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.dao.IncorrectResultSizeDataAccessException; import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.dao.InvalidDataAccessResourceUsageException; +import org.springframework.tests.sample.beans.TestBean; import org.springframework.transaction.support.TransactionSynchronizationManager; /** * @author Juergen Hoeller + * @author Phillip Webb * @since 05.03.2005 */ -public class HibernateTemplateTests extends TestCase { +public class HibernateTemplateTests { - private MockControl sfControl; - private SessionFactory sf; - private MockControl sessionControl; + private SessionFactory sessionFactory; private Session session; + private HibernateTemplate hibernateTemplate; - @Override - protected void setUp() { - sfControl = MockControl.createControl(SessionFactory.class); - sf = (SessionFactory) sfControl.getMock(); - sessionControl = MockControl.createControl(Session.class); - session = (Session) sessionControl.getMock(); + @Before + public void setUp() { + this.sessionFactory = mock(SessionFactory.class); + this.session = mock(Session.class); + this.hibernateTemplate = new HibernateTemplate(sessionFactory); + given(sessionFactory.openSession()).willReturn(session); + given(session.getSessionFactory()).willReturn(sessionFactory); } + @After + public void tearDown() { + assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); + assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); + } + + @Test public void testExecuteWithNewSession() throws HibernateException { - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - assertTrue("Correct allowCreate default", ht.isAllowCreate()); - assertTrue("Correct flushMode default", ht.getFlushMode() == HibernateTemplate.FLUSH_AUTO); + assertTrue("Correct allowCreate default", hibernateTemplate.isAllowCreate()); + assertTrue("Correct flushMode default", hibernateTemplate.getFlushMode() == HibernateTemplate.FLUSH_AUTO); final List l = new ArrayList(); l.add("test"); - List result = ht.executeFind(new HibernateCallback() { + List result = hibernateTemplate.executeFind(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return l; } }); assertTrue("Correct result list", result == l); + verify(session).flush(); + verify(session).close(); } + @Test public void testExecuteWithNewSessionAndFlushNever() throws HibernateException { - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.setFlushMode(FlushMode.MANUAL); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setFlushMode(HibernateTemplate.FLUSH_NEVER); + hibernateTemplate.setFlushMode(HibernateTemplate.FLUSH_NEVER); final List l = new ArrayList(); l.add("test"); - List result = ht.executeFind(new HibernateCallback() { + List result = hibernateTemplate.executeFind(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return l; } }); assertTrue("Correct result list", result == l); + verify(session).setFlushMode(FlushMode.MANUAL); + verify(session).close(); } + @Test public void testExecuteWithNewSessionAndFilter() throws HibernateException { - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.enableFilter("myFilter"); - sessionControl.setReturnValue(null, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setFilterName("myFilter"); + hibernateTemplate.setFilterName("myFilter"); final List l = new ArrayList(); l.add("test"); - List result = ht.executeFind(new HibernateCallback() { + List result = hibernateTemplate.executeFind(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return l; } }); assertTrue("Correct result list", result == l); + verify(session).enableFilter("myFilter"); + verify(session).flush(); + verify(session).close(); } + @Test public void testExecuteWithNewSessionAndFilters() throws HibernateException { - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.enableFilter("myFilter"); - sessionControl.setReturnValue(null, 1); - session.enableFilter("yourFilter"); - sessionControl.setReturnValue(null, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setFilterNames(new String[] {"myFilter", "yourFilter"}); + hibernateTemplate.setFilterNames(new String[] {"myFilter", "yourFilter"}); final List l = new ArrayList(); l.add("test"); - List result = ht.executeFind(new HibernateCallback() { + List result = hibernateTemplate.executeFind(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return l; } }); assertTrue("Correct result list", result == l); + InOrder ordered = inOrder(session); + ordered.verify(session).enableFilter("myFilter"); + ordered.verify(session).enableFilter("yourFilter"); + ordered.verify(session).flush(); + ordered.verify(session).close(); } + @Test public void testExecuteWithNotAllowCreate() { - sf.getCurrentSession(); - sfControl.setThrowable(new HibernateException("")); - sfControl.replay(); - + reset(sessionFactory); + given(sessionFactory.getCurrentSession()).willThrow(new HibernateException("")); HibernateTemplate ht = new HibernateTemplate(); - ht.setSessionFactory(sf); + ht.setSessionFactory(sessionFactory); ht.setAllowCreate(false); try { - ht.execute(new HibernateCallback() { + ht.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return null; @@ -212,17 +195,14 @@ public class HibernateTemplateTests extends TestCase { } } + @Test public void testExecuteWithNotAllowCreateAndThreadBound() { - sf.getCurrentSession(); - sfControl.setReturnValue(session); - sfControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setAllowCreate(false); + given(sessionFactory.getCurrentSession()).willReturn(session); + hibernateTemplate.setAllowCreate(false); final List l = new ArrayList(); l.add("test"); - List result = ht.executeFind(new HibernateCallback() { + List result = hibernateTemplate.executeFind(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return l; @@ -231,26 +211,16 @@ public class HibernateTemplateTests extends TestCase { assertTrue("Correct result list", result == l); } + @Test public void testExecuteWithThreadBoundAndFlushEager() throws HibernateException { - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO); - session.flush(); - sessionControl.setVoidCallable(1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setFlushModeName("FLUSH_EAGER"); - - TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session)); + given(session.isOpen()).willReturn(true); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + hibernateTemplate.setFlushModeName("FLUSH_EAGER"); + TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session)); try { final List l = new ArrayList(); l.add("test"); - List result = ht.executeFind(new HibernateCallback() { + List result = hibernateTemplate.executeFind(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return l; @@ -259,30 +229,21 @@ public class HibernateTemplateTests extends TestCase { assertTrue("Correct result list", result == l); } finally { - TransactionSynchronizationManager.unbindResource(sf); + TransactionSynchronizationManager.unbindResource(sessionFactory); } + verify(session).flush(); } + @Test public void testExecuteWithThreadBoundAndFilter() { - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.enableFilter("myFilter"); - sessionControl.setReturnValue(null, 1); - session.disableFilter("myFilter"); - sessionControl.setVoidCallable(1); - sfControl.replay(); - sessionControl.replay(); + given(session.isOpen()).willReturn(true); + hibernateTemplate.setFilterName("myFilter"); - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setFilterName("myFilter"); - - TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session)); + TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session)); try { final List l = new ArrayList(); l.add("test"); - List result = ht.executeFind(new HibernateCallback() { + List result = hibernateTemplate.executeFind(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return l; @@ -291,34 +252,23 @@ public class HibernateTemplateTests extends TestCase { assertTrue("Correct result list", result == l); } finally { - TransactionSynchronizationManager.unbindResource(sf); + TransactionSynchronizationManager.unbindResource(sessionFactory); } + InOrder ordered = inOrder(session); + ordered.verify(session).enableFilter("myFilter"); + ordered.verify(session).disableFilter("myFilter"); } + @Test public void testExecuteWithThreadBoundAndFilters() { - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.enableFilter("myFilter"); - sessionControl.setReturnValue(null, 1); - session.enableFilter("yourFilter"); - sessionControl.setReturnValue(null, 1); - session.disableFilter("myFilter"); - sessionControl.setVoidCallable(1); - session.disableFilter("yourFilter"); - sessionControl.setVoidCallable(1); - sfControl.replay(); - sessionControl.replay(); + given(session.isOpen()).willReturn(true); + hibernateTemplate.setFilterNames(new String[] {"myFilter", "yourFilter"}); - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setFilterNames(new String[] {"myFilter", "yourFilter"}); - - TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session)); + TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session)); try { final List l = new ArrayList(); l.add("test"); - List result = ht.executeFind(new HibernateCallback() { + List result = hibernateTemplate.executeFind(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return l; @@ -327,96 +277,72 @@ public class HibernateTemplateTests extends TestCase { assertTrue("Correct result list", result == l); } finally { - TransactionSynchronizationManager.unbindResource(sf); + TransactionSynchronizationManager.unbindResource(sessionFactory); } + InOrder ordered = inOrder(session); + ordered.verify(session).enableFilter("myFilter"); + ordered.verify(session).enableFilter("yourFilter"); + ordered.verify(session).disableFilter("myFilter"); + ordered.verify(session).disableFilter("yourFilter"); } + @Test public void testExecuteWithThreadBoundAndParameterizedFilter() { - MockControl filterControl = MockControl.createControl(Filter.class); - Filter filter = (Filter) filterControl.getMock(); + Filter filter = mock(Filter.class); + given(session.isOpen()).willReturn(true); + given(session.enableFilter("myFilter")).willReturn(filter); + hibernateTemplate.setAllowCreate(false); + hibernateTemplate.setFilterName("myFilter"); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.getEnabledFilter("myFilter"); - sessionControl.setReturnValue(null, 1); - session.enableFilter("myFilter"); - sessionControl.setReturnValue(filter, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setAllowCreate(false); - ht.setFilterName("myFilter"); - - TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session)); + TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session)); try { final List l = new ArrayList(); l.add("test"); - Filter f = ht.enableFilter("myFilter"); + Filter f = hibernateTemplate.enableFilter("myFilter"); assertTrue("Correct filter", f == filter); } finally { - TransactionSynchronizationManager.unbindResource(sf); + TransactionSynchronizationManager.unbindResource(sessionFactory); } + InOrder ordered = inOrder(session); + ordered.verify(session).getEnabledFilter("myFilter"); + ordered.verify(session).enableFilter("myFilter"); } + @Test public void testExecuteWithThreadBoundAndParameterizedExistingFilter() { - MockControl filterControl = MockControl.createControl(Filter.class); - Filter filter = (Filter) filterControl.getMock(); + Filter filter = mock(Filter.class); + given(session.isOpen()).willReturn(true); + given(session.enableFilter("myFilter")).willReturn(filter); + hibernateTemplate.setAllowCreate(false); + hibernateTemplate.setFilterName("myFilter"); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.getEnabledFilter("myFilter"); - sessionControl.setReturnValue(filter, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setAllowCreate(false); - ht.setFilterName("myFilter"); - - TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session)); + TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session)); try { final List l = new ArrayList(); l.add("test"); - Filter f = ht.enableFilter("myFilter"); + Filter f = hibernateTemplate.enableFilter("myFilter"); assertTrue("Correct filter", f == filter); } finally { - TransactionSynchronizationManager.unbindResource(sf); + TransactionSynchronizationManager.unbindResource(sessionFactory); } + verify(session).getEnabledFilter("myFilter"); } + @Test public void testExecuteWithThreadBoundAndNewSession() throws HibernateException { - MockControl conControl = MockControl.createControl(Connection.class); - Connection con = (Connection) conControl.getMock(); - MockControl session2Control = MockControl.createControl(Session.class); - Session session2 = (Session) session2Control.getMock(); + Connection con = mock(Connection.class); + Session session2 = mock(Session.class); + given(session2.connection()).willReturn(con); + given(sessionFactory.openSession(con)).willReturn(session); + hibernateTemplate.setAlwaysUseNewSession(true); - session2.connection(); - session2Control.setReturnValue(con, 1); - sf.openSession(con); - sfControl.setReturnValue(session, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - session2Control.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setAlwaysUseNewSession(true); - - TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session2)); + TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session2)); try { final List l = new ArrayList(); l.add("test"); - List result = ht.executeFind(new HibernateCallback() { + List result = hibernateTemplate.executeFind(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return l; @@ -425,40 +351,27 @@ public class HibernateTemplateTests extends TestCase { assertTrue("Correct result list", result == l); } finally { - TransactionSynchronizationManager.unbindResource(sf); + TransactionSynchronizationManager.unbindResource(sessionFactory); } + verify(session).flush(); + verify(session).close(); } + @Test public void testExecuteWithThreadBoundAndNewSessionAndEntityInterceptor() throws HibernateException { - MockControl interceptorControl = MockControl.createControl(org.hibernate.Interceptor.class); - Interceptor entityInterceptor = (Interceptor) interceptorControl.getMock(); + Interceptor entityInterceptor = mock(Interceptor.class); + Connection con = mock(Connection.class); + Session session2 = mock(Session.class); + given(session2.connection()).willReturn(con); + given(sessionFactory.openSession(con, entityInterceptor)).willReturn(session); + hibernateTemplate.setAlwaysUseNewSession(true); + hibernateTemplate.setEntityInterceptor(entityInterceptor); - MockControl conControl = MockControl.createControl(Connection.class); - Connection con = (Connection) conControl.getMock(); - MockControl session2Control = MockControl.createControl(Session.class); - Session session2 = (Session) session2Control.getMock(); - - session2.connection(); - session2Control.setReturnValue(con, 1); - sf.openSession(con, entityInterceptor); - sfControl.setReturnValue(session, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - session2Control.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setAlwaysUseNewSession(true); - ht.setEntityInterceptor(entityInterceptor); - - TransactionSynchronizationManager.bindResource(sf, new SessionHolder(session2)); + TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session2)); try { final List l = new ArrayList(); l.add("test"); - List result = ht.executeFind(new HibernateCallback() { + List result = hibernateTemplate.executeFind(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return l; @@ -467,75 +380,44 @@ public class HibernateTemplateTests extends TestCase { assertTrue("Correct result list", result == l); } finally { - TransactionSynchronizationManager.unbindResource(sf); + TransactionSynchronizationManager.unbindResource(sessionFactory); } + verify(session).flush(); + verify(session).close(); } + @Test public void testExecuteWithEntityInterceptor() throws HibernateException { - MockControl interceptorControl = MockControl.createControl(org.hibernate.Interceptor.class); - Interceptor entityInterceptor = (Interceptor) interceptorControl.getMock(); - - sf.openSession(entityInterceptor); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setEntityInterceptor(entityInterceptor); + Interceptor entityInterceptor = mock(Interceptor.class); + given(sessionFactory.openSession(entityInterceptor)).willReturn(session); + hibernateTemplate.setEntityInterceptor(entityInterceptor); final List l = new ArrayList(); l.add("test"); - List result = ht.executeFind(new HibernateCallback() { + List result = hibernateTemplate.executeFind(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { return l; } }); assertTrue("Correct result list", result == l); + verify(session).flush(); + verify(session).close(); } + @Test public void testExecuteWithCacheQueries() throws HibernateException { - MockControl query1Control = MockControl.createControl(Query.class); - Query query1 = (Query) query1Control.getMock(); - MockControl query2Control = MockControl.createControl(Query.class); - Query query2 = (Query) query2Control.getMock(); - MockControl criteriaControl = MockControl.createControl(Criteria.class); - Criteria criteria = (Criteria) criteriaControl.getMock(); + Query query1 = mock(Query.class); + Query query2 = mock(Query.class); + Criteria criteria = mock(Criteria.class); + given(session.createQuery("some query")).willReturn(query1); + given(query1.setCacheable(true)).willReturn(query1); + given(session.getNamedQuery("some query name")).willReturn(query2); + given(query2.setCacheable(true)).willReturn(query2); + given(session.createCriteria(TestBean.class)).willReturn(criteria); + given(criteria.setCacheable(true)).willReturn(criteria); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.createQuery("some query"); - sessionControl.setReturnValue(query1); - query1.setCacheable(true); - query1Control.setReturnValue(query1, 1); - session.getNamedQuery("some query name"); - sessionControl.setReturnValue(query2); - query2.setCacheable(true); - query2Control.setReturnValue(query2, 1); - session.createCriteria(TestBean.class); - sessionControl.setReturnValue(criteria, 1); - criteria.setCacheable(true); - criteriaControl.setReturnValue(criteria, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - query1Control.replay(); - query2Control.replay(); - criteriaControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setCacheQueries(true); - ht.execute(new HibernateCallback() { + hibernateTemplate.setCacheQueries(true); + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session sess) throws HibernateException { assertNotSame(session, sess); @@ -549,55 +431,28 @@ public class HibernateTemplateTests extends TestCase { } }); - query1Control.verify(); - query2Control.verify(); - criteriaControl.verify(); + verify(session).flush(); + verify(session).close(); } + @Test public void testExecuteWithCacheQueriesAndCacheRegion() throws HibernateException { - MockControl query1Control = MockControl.createControl(Query.class); - Query query1 = (Query) query1Control.getMock(); - MockControl query2Control = MockControl.createControl(Query.class); - Query query2 = (Query) query2Control.getMock(); - MockControl criteriaControl = MockControl.createControl(Criteria.class); - Criteria criteria = (Criteria) criteriaControl.getMock(); + Query query1 = mock(Query.class); + Query query2 = mock(Query.class); + Criteria criteria = mock(Criteria.class); + given(session.createQuery("some query")).willReturn(query1); + given(query1.setCacheable(true)).willReturn(query1); + given(query1.setCacheRegion("myRegion")).willReturn(query1); + given(session.getNamedQuery("some query name")).willReturn(query2); + given(query2.setCacheable(true)).willReturn(query2); + given(query2.setCacheRegion("myRegion")).willReturn(query2); + given(session.createCriteria(TestBean.class)).willReturn(criteria); + given(criteria.setCacheable(true)).willReturn(criteria); + given(criteria.setCacheRegion("myRegion")).willReturn(criteria); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.createQuery("some query"); - sessionControl.setReturnValue(query1); - query1.setCacheable(true); - query1Control.setReturnValue(query1, 1); - query1.setCacheRegion("myRegion"); - query1Control.setReturnValue(query1, 1); - session.getNamedQuery("some query name"); - sessionControl.setReturnValue(query2); - query2.setCacheable(true); - query2Control.setReturnValue(query2, 1); - query2.setCacheRegion("myRegion"); - query2Control.setReturnValue(query2, 1); - session.createCriteria(TestBean.class); - sessionControl.setReturnValue(criteria, 1); - criteria.setCacheable(true); - criteriaControl.setReturnValue(criteria, 1); - criteria.setCacheRegion("myRegion"); - criteriaControl.setReturnValue(criteria, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - query1Control.replay(); - query2Control.replay(); - criteriaControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setCacheQueries(true); - ht.setQueryCacheRegion("myRegion"); - ht.execute(new HibernateCallback() { + hibernateTemplate.setCacheQueries(true); + hibernateTemplate.setQueryCacheRegion("myRegion"); + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session sess) throws HibernateException { assertNotSame(session, sess); @@ -611,44 +466,24 @@ public class HibernateTemplateTests extends TestCase { } }); - query1Control.verify(); - query2Control.verify(); - criteriaControl.verify(); + verify(session).flush(); + verify(session).close(); } + @Test public void testExecuteWithCacheQueriesAndCacheRegionAndNativeSession() throws HibernateException { - MockControl query1Control = MockControl.createControl(Query.class); - Query query1 = (Query) query1Control.getMock(); - MockControl query2Control = MockControl.createControl(Query.class); - Query query2 = (Query) query2Control.getMock(); - MockControl criteriaControl = MockControl.createControl(Criteria.class); - Criteria criteria = (Criteria) criteriaControl.getMock(); + Query query1 = mock(Query.class); + Query query2 = mock(Query.class); + Criteria criteria = mock(Criteria.class); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.createQuery("some query"); - sessionControl.setReturnValue(query1); - session.getNamedQuery("some query name"); - sessionControl.setReturnValue(query2); - session.createCriteria(TestBean.class); - sessionControl.setReturnValue(criteria, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - query1Control.replay(); - query2Control.replay(); - criteriaControl.replay(); + given(session.createQuery("some query")).willReturn(query1); + given(session.getNamedQuery("some query name")).willReturn(query2); + given(session.createCriteria(TestBean.class)).willReturn(criteria); - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setExposeNativeSession(true); - ht.setCacheQueries(true); - ht.setQueryCacheRegion("myRegion"); - ht.execute(new HibernateCallback() { + hibernateTemplate.setExposeNativeSession(true); + hibernateTemplate.setCacheQueries(true); + hibernateTemplate.setQueryCacheRegion("myRegion"); + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session sess) throws HibernateException { assertSame(session, sess); @@ -659,55 +494,29 @@ public class HibernateTemplateTests extends TestCase { } }); - query1Control.verify(); - query2Control.verify(); - criteriaControl.verify(); + verify(session).flush(); + verify(session).close(); } + @Test public void testExecuteWithFetchSizeAndMaxResults() throws HibernateException { - MockControl query1Control = MockControl.createControl(Query.class); - Query query1 = (Query) query1Control.getMock(); - MockControl query2Control = MockControl.createControl(Query.class); - Query query2 = (Query) query2Control.getMock(); - MockControl criteriaControl = MockControl.createControl(Criteria.class); - Criteria criteria = (Criteria) criteriaControl.getMock(); + Query query1 = mock(Query.class); + Query query2 = mock(Query.class); + Criteria criteria = mock(Criteria.class); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.createQuery("some query"); - sessionControl.setReturnValue(query1); - query1.setFetchSize(10); - query1Control.setReturnValue(query1, 1); - query1.setMaxResults(20); - query1Control.setReturnValue(query1, 1); - session.getNamedQuery("some query name"); - sessionControl.setReturnValue(query2); - query2.setFetchSize(10); - query2Control.setReturnValue(query2, 1); - query2.setMaxResults(20); - query2Control.setReturnValue(query2, 1); - session.createCriteria(TestBean.class); - sessionControl.setReturnValue(criteria, 1); - criteria.setFetchSize(10); - criteriaControl.setReturnValue(criteria, 1); - criteria.setMaxResults(20); - criteriaControl.setReturnValue(criteria, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - query1Control.replay(); - query2Control.replay(); - criteriaControl.replay(); + given(session.createQuery("some query")).willReturn(query1); + given(query1.setFetchSize(10)).willReturn(query1); + given(query1.setMaxResults(20)).willReturn(query1); + given(session.getNamedQuery("some query name")).willReturn(query2); + given(query2.setFetchSize(10)).willReturn(query2); + given(query2.setMaxResults(20)).willReturn(query2); + given(session.createCriteria(TestBean.class)).willReturn(criteria); + given(criteria.setFetchSize(10)).willReturn(criteria); + given(criteria.setMaxResults(20)).willReturn(criteria); - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setFetchSize(10); - ht.setMaxResults(20); - ht.execute(new HibernateCallback() { + hibernateTemplate.setFetchSize(10); + hibernateTemplate.setMaxResults(20); + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session sess) throws HibernateException { sess.createQuery("some query"); @@ -717,128 +526,66 @@ public class HibernateTemplateTests extends TestCase { } }); - query1Control.verify(); - query2Control.verify(); - criteriaControl.verify(); + verify(session).flush(); + verify(session).close(); } + @Test public void testGet() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.get(TestBean.class, ""); - sessionControl.setReturnValue(tb, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - Object result = ht.get(TestBean.class, ""); + given(session.get(TestBean.class, "")).willReturn(tb); + Object result = hibernateTemplate.get(TestBean.class, ""); assertTrue("Correct result", result == tb); + verify(session).flush(); + verify(session).close(); } + @Test public void testGetWithLockMode() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.get(TestBean.class, "", LockMode.UPGRADE_NOWAIT); - sessionControl.setReturnValue(tb, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - Object result = ht.get(TestBean.class, "", LockMode.UPGRADE_NOWAIT); + given(session.get(TestBean.class, "", LockMode.UPGRADE_NOWAIT)).willReturn(tb); + Object result = hibernateTemplate.get(TestBean.class, "", LockMode.UPGRADE_NOWAIT); assertTrue("Correct result", result == tb); + verify(session).flush(); + verify(session).close(); } + @Test public void testGetWithEntityName() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.get("myEntity", ""); - sessionControl.setReturnValue(tb, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - Object result = ht.get("myEntity", ""); + given(session.get("myEntity", "")).willReturn(tb); + Object result = hibernateTemplate.get("myEntity", ""); assertTrue("Correct result", result == tb); + verify(session).flush(); + verify(session).close(); } + @Test public void testGetWithEntityNameAndLockMode() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.get("myEntity", "", LockMode.UPGRADE_NOWAIT); - sessionControl.setReturnValue(tb, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - Object result = ht.get("myEntity", "", LockMode.UPGRADE_NOWAIT); + given(session.get("myEntity", "", LockMode.UPGRADE_NOWAIT)).willReturn(tb); + Object result = hibernateTemplate.get("myEntity", "", LockMode.UPGRADE_NOWAIT); assertTrue("Correct result", result == tb); + verify(session).flush(); + verify(session).close(); } + @Test public void testLoad() throws HibernateException { TestBean tb = new TestBean(); - - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.load(TestBean.class, ""); - sessionControl.setReturnValue(tb, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - Object result = ht.load(TestBean.class, ""); + given(session.load(TestBean.class, "")).willReturn(tb); + Object result = hibernateTemplate.load(TestBean.class, ""); assertTrue("Correct result", result == tb); + verify(session).flush(); + verify(session).close(); } + @Test public void testLoadWithNotFound() throws HibernateException { - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.load(TestBean.class, "id"); ObjectNotFoundException onfex = new ObjectNotFoundException("id", TestBean.class.getName()); - sessionControl.setThrowable(onfex); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); + given(session.load(TestBean.class, "id")).willThrow(onfex); try { - ht.load(TestBean.class, "id"); + hibernateTemplate.load(TestBean.class, "id"); fail("Should have thrown HibernateObjectRetrievalFailureException"); } catch (HibernateObjectRetrievalFailureException ex) { @@ -847,1449 +594,723 @@ public class HibernateTemplateTests extends TestCase { assertEquals("id", ex.getIdentifier()); assertEquals(onfex, ex.getCause()); } + verify(session).close(); } + @Test public void testLoadWithLockMode() throws HibernateException { TestBean tb = new TestBean(); - - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.load(TestBean.class, "", LockMode.UPGRADE); - sessionControl.setReturnValue(tb, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - Object result = ht.load(TestBean.class, "", LockMode.UPGRADE); + given(session.load(TestBean.class, "", LockMode.UPGRADE)).willReturn(tb); + Object result = hibernateTemplate.load(TestBean.class, "", LockMode.UPGRADE); assertTrue("Correct result", result == tb); + verify(session).flush(); + verify(session).close(); } + @Test public void testLoadWithEntityName() throws HibernateException { TestBean tb = new TestBean(); - - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.load("myEntity", ""); - sessionControl.setReturnValue(tb, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - Object result = ht.load("myEntity", ""); + given(session.load("myEntity", "")).willReturn(tb); + Object result = hibernateTemplate.load("myEntity", ""); assertTrue("Correct result", result == tb); + verify(session).flush(); + verify(session).close(); } + @Test public void testLoadWithEntityNameLockMode() throws HibernateException { TestBean tb = new TestBean(); - - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.load("myEntity", "", LockMode.UPGRADE); - sessionControl.setReturnValue(tb, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - Object result = ht.load("myEntity", "", LockMode.UPGRADE); + given(session.load("myEntity", "", LockMode.UPGRADE)).willReturn(tb); + Object result = hibernateTemplate.load("myEntity", "", LockMode.UPGRADE); assertTrue("Correct result", result == tb); + verify(session).flush(); + verify(session).close(); } + @Test public void testLoadWithObject() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.load(tb, ""); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.load(tb, ""); + hibernateTemplate.load(tb, ""); + verify(session).load(tb, ""); + verify(session).flush(); + verify(session).close(); } + @Test public void testLoadAll() throws HibernateException { - MockControl criteriaControl = MockControl.createControl(Criteria.class); - Criteria criteria = (Criteria) criteriaControl.getMock(); + Criteria criteria = mock(Criteria.class); List list = new ArrayList(); - - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.createCriteria(TestBean.class); - sessionControl.setReturnValue(criteria, 1); - criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); - criteriaControl.setReturnValue(criteria); - criteria.list(); - criteriaControl.setReturnValue(list, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - criteriaControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - List result = ht.loadAll(TestBean.class); + given(session.createCriteria(TestBean.class)).willReturn(criteria); + given(criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)).willReturn(criteria); + given(criteria.list()).willReturn(list); + List result = hibernateTemplate.loadAll(TestBean.class); assertTrue("Correct result", result == list); - - criteriaControl.verify(); + verify(session).flush(); + verify(session).close(); } + @Test public void testLoadAllWithCacheable() throws HibernateException { - MockControl criteriaControl = MockControl.createControl(Criteria.class); - Criteria criteria = (Criteria) criteriaControl.getMock(); + Criteria criteria = mock(Criteria.class); List list = new ArrayList(); + given(session.createCriteria(TestBean.class)).willReturn(criteria); + given(criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)).willReturn(criteria); + given(criteria.setCacheable(true)).willReturn(criteria); + given(criteria.list()).willReturn(list); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.createCriteria(TestBean.class); - sessionControl.setReturnValue(criteria, 1); - criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); - criteriaControl.setReturnValue(criteria); - criteria.setCacheable(true); - criteriaControl.setReturnValue(criteria, 1); - criteria.list(); - criteriaControl.setReturnValue(list, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - criteriaControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setCacheQueries(true); - List result = ht.loadAll(TestBean.class); + hibernateTemplate.setCacheQueries(true); + List result = hibernateTemplate.loadAll(TestBean.class); assertTrue("Correct result", result == list); - - criteriaControl.verify(); + verify(criteria).setCacheable(true); + verify(session).flush(); + verify(session).close(); } + @Test public void testLoadAllWithCacheableAndCacheRegion() throws HibernateException { - MockControl criteriaControl = MockControl.createControl(Criteria.class); - Criteria criteria = (Criteria) criteriaControl.getMock(); + Criteria criteria = mock(Criteria.class); List list = new ArrayList(); + given(session.createCriteria(TestBean.class)).willReturn(criteria); + given(criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)).willReturn(criteria); + given(criteria.setCacheable(true)).willReturn(criteria); + given(criteria.setCacheRegion("myCacheRegion")).willReturn(criteria); + given(criteria.list()).willReturn(list); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.createCriteria(TestBean.class); - sessionControl.setReturnValue(criteria, 1); - criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); - criteriaControl.setReturnValue(criteria); - criteria.setCacheable(true); - criteriaControl.setReturnValue(criteria, 1); - criteria.setCacheRegion("myCacheRegion"); - criteriaControl.setReturnValue(criteria, 1); - criteria.list(); - criteriaControl.setReturnValue(list, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - criteriaControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setCacheQueries(true); - ht.setQueryCacheRegion("myCacheRegion"); - List result = ht.loadAll(TestBean.class); + hibernateTemplate.setCacheQueries(true); + hibernateTemplate.setQueryCacheRegion("myCacheRegion"); + List result = hibernateTemplate.loadAll(TestBean.class); assertTrue("Correct result", result == list); - - criteriaControl.verify(); + verify(criteria).setCacheable(true); + verify(criteria).setCacheRegion("myCacheRegion"); + verify(session).flush(); + verify(session).close(); } - public void testRefresh() throws HibernateException { + @Test public void testRefresh() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.refresh(tb); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.refresh(tb); + hibernateTemplate.refresh(tb); + verify(session).refresh(tb); + verify(session).flush(); + verify(session).close(); } - public void testContains() throws HibernateException { + @Test public void testContains() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.contains(tb); - sessionControl.setReturnValue(true, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - assertTrue(ht.contains(tb)); + given(session.contains(tb)).willReturn(true); + assertTrue(hibernateTemplate.contains(tb)); + verify(session).flush(); + verify(session).close(); } + @Test public void testEvict() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.evict(tb); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.evict(tb); + hibernateTemplate.evict(tb); + verify(session).evict(tb); + verify(session).flush(); + verify(session).close(); } + @Test public void testLock() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.lock(tb, LockMode.WRITE); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.lock(tb, LockMode.WRITE); + hibernateTemplate.lock(tb, LockMode.WRITE); + verify(session).lock(tb, LockMode.WRITE); + verify(session).flush(); + verify(session).close(); } + @Test public void testLockWithEntityName() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.lock("myEntity", tb, LockMode.WRITE); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.lock("myEntity", tb, LockMode.WRITE); + hibernateTemplate.lock("myEntity", tb, LockMode.WRITE); + verify(session).lock("myEntity", tb, LockMode.WRITE); + verify(session).flush(); + verify(session).close(); } + @Test public void testSave() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO); - session.save(tb); - sessionControl.setReturnValue(new Integer(0), 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - assertEquals("Correct return value", ht.save(tb), new Integer(0)); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + given(session.save(tb)).willReturn(0); + assertEquals("Correct return value", hibernateTemplate.save(tb), 0); + verify(session).flush(); + verify(session).close(); } + @Test public void testSaveWithEntityName() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO); - session.save("myEntity", tb); - sessionControl.setReturnValue(new Integer(0), 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - assertEquals("Correct return value", ht.save("myEntity", tb), new Integer(0)); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + given(session.save("myEntity", tb)).willReturn(0); + assertEquals("Correct return value", hibernateTemplate.save("myEntity", tb), 0); + verify(session).flush(); + verify(session).close(); } + @Test public void testUpdate() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO); - session.update(tb); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.update(tb); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + hibernateTemplate.update(tb); + verify(session).update(tb); + verify(session).flush(); + verify(session).close(); } + @Test public void testUpdateWithLockMode() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO); - session.update(tb); - sessionControl.setVoidCallable(1); - session.lock(tb, LockMode.UPGRADE); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.update(tb, LockMode.UPGRADE); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + hibernateTemplate.update(tb, LockMode.UPGRADE); + verify(session).update(tb); + verify(session).lock(tb, LockMode.UPGRADE); + verify(session).flush(); + verify(session).close(); } + @Test public void testUpdateWithEntityName() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO); - session.update("myEntity", tb); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.update("myEntity", tb); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + hibernateTemplate.update("myEntity", tb); + verify(session).update("myEntity", tb); + verify(session).flush(); + verify(session).close(); } + @Test public void testUpdateWithEntityNameAndLockMode() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO); - session.update("myEntity", tb); - sessionControl.setVoidCallable(1); - session.lock(tb, LockMode.UPGRADE); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.update("myEntity", tb, LockMode.UPGRADE); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + hibernateTemplate.update("myEntity", tb, LockMode.UPGRADE); + verify(session).update("myEntity", tb); + verify(session).lock(tb, LockMode.UPGRADE); + verify(session).flush(); + verify(session).close(); } + @Test public void testSaveOrUpdate() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO); - session.saveOrUpdate(tb); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.saveOrUpdate(tb); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + hibernateTemplate.saveOrUpdate(tb); + verify(session).saveOrUpdate(tb); + verify(session).flush(); + verify(session).close(); } + @Test public void testSaveOrUpdateWithFlushModeNever() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.MANUAL); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); + given(session.getFlushMode()).willReturn(FlushMode.MANUAL); try { - ht.saveOrUpdate(tb); + hibernateTemplate.saveOrUpdate(tb); fail("Should have thrown InvalidDataAccessApiUsageException"); } catch (InvalidDataAccessApiUsageException ex) { // expected } + verify(session).close(); } + @Test public void testSaveOrUpdateWithEntityName() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO); - session.saveOrUpdate("myEntity", tb); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - HibernateTemplate ht = new HibernateTemplate(sf); - ht.saveOrUpdate("myEntity", tb); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + hibernateTemplate.saveOrUpdate("myEntity", tb); + verify(session).saveOrUpdate("myEntity", tb); + verify(session).flush(); + verify(session).close(); } + @Test public void testSaveOrUpdateAll() throws HibernateException { TestBean tb1 = new TestBean(); TestBean tb2 = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO); - session.saveOrUpdate(tb1); - sessionControl.setVoidCallable(1); - session.saveOrUpdate(tb2); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); List tbs = new ArrayList(); tbs.add(tb1); tbs.add(tb2); - ht.saveOrUpdateAll(tbs); + hibernateTemplate.saveOrUpdateAll(tbs); + verify(session).saveOrUpdate(same(tb1)); + verify(session).saveOrUpdate(same(tb2)); + verify(session).flush(); + verify(session).close(); } + @Test public void testReplicate() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO); - session.replicate(tb, ReplicationMode.LATEST_VERSION); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.replicate(tb, ReplicationMode.LATEST_VERSION); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + hibernateTemplate.replicate(tb, ReplicationMode.LATEST_VERSION); + verify(session).replicate(tb, ReplicationMode.LATEST_VERSION); + verify(session).flush(); + verify(session).close(); } + @Test public void testReplicateWithEntityName() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO); - session.replicate("myEntity", tb, ReplicationMode.LATEST_VERSION); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.replicate("myEntity", tb, ReplicationMode.LATEST_VERSION); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + hibernateTemplate.replicate("myEntity", tb, ReplicationMode.LATEST_VERSION); + verify(session).replicate("myEntity", tb, ReplicationMode.LATEST_VERSION); + verify(session).flush(); + verify(session).close(); } + @Test public void testPersist() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO); - session.persist(tb); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.persist(tb); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + hibernateTemplate.persist(tb); + verify(session).persist(tb); + verify(session).flush(); + verify(session).close(); } + @Test public void testPersistWithEntityName() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO); - session.persist("myEntity", tb); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.persist("myEntity", tb); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + hibernateTemplate.persist("myEntity", tb); + verify(session).persist("myEntity", tb); + verify(session).flush(); + verify(session).close(); } + @Test public void testMerge() throws HibernateException { TestBean tb = new TestBean(); TestBean tbMerged = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO); - session.merge(tb); - sessionControl.setReturnValue(tbMerged, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - assertSame(tbMerged, ht.merge(tb)); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + given(session.merge(tb)).willReturn(tbMerged); + assertSame(tbMerged, hibernateTemplate.merge(tb)); + verify(session).flush(); + verify(session).close(); } + @Test public void testMergeWithEntityName() throws HibernateException { TestBean tb = new TestBean(); TestBean tbMerged = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO); - session.merge("myEntity", tb); - sessionControl.setReturnValue(tbMerged, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - assertSame(tbMerged, ht.merge("myEntity", tb)); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + given(session.merge("myEntity", tb)).willReturn(tbMerged); + assertSame(tbMerged, hibernateTemplate.merge("myEntity", tb)); + verify(session).flush(); + verify(session).close(); } + @Test public void testDelete() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO); - session.delete(tb); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.delete(tb); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + hibernateTemplate.delete(tb); + verify(session).delete(tb); + verify(session).flush(); + verify(session).close(); } + @Test public void testDeleteWithLockMode() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO); - session.lock(tb, LockMode.UPGRADE); - sessionControl.setVoidCallable(1); - session.delete(tb); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.delete(tb, LockMode.UPGRADE); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + hibernateTemplate.delete(tb, LockMode.UPGRADE); + verify(session).lock(tb, LockMode.UPGRADE); + verify(session).delete(tb); + verify(session).flush(); + verify(session).close(); } + @Test public void testDeleteWithEntityName() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO); - session.delete("myEntity", tb); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.delete("myEntity", tb); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + hibernateTemplate.delete("myEntity", tb); + verify(session).delete("myEntity", tb); + verify(session).flush(); + verify(session).close(); } + @Test public void testDeleteWithEntityNameAndLockMode() throws HibernateException { TestBean tb = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO); - session.lock("myEntity", tb, LockMode.UPGRADE); - sessionControl.setVoidCallable(1); - session.delete("myEntity", tb); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.delete("myEntity", tb, LockMode.UPGRADE); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + hibernateTemplate.delete("myEntity", tb, LockMode.UPGRADE); + verify(session).lock("myEntity", tb, LockMode.UPGRADE); + verify(session).delete("myEntity", tb); + verify(session).flush(); + verify(session).close(); } + @Test public void testDeleteAll() throws HibernateException { TestBean tb1 = new TestBean(); TestBean tb2 = new TestBean(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO); - session.delete(tb1); - sessionControl.setVoidCallable(1); - session.delete(tb2); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); List tbs = new ArrayList(); tbs.add(tb1); tbs.add(tb2); - ht.deleteAll(tbs); + hibernateTemplate.deleteAll(tbs); + verify(session).delete(same(tb1)); + verify(session).delete(same(tb2)); + verify(session).flush(); + verify(session).close(); } + @Test public void testFlush() throws HibernateException { - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.setFlushMode(FlushMode.MANUAL); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setFlushMode(HibernateTemplate.FLUSH_NEVER); - ht.flush(); + hibernateTemplate.setFlushMode(HibernateTemplate.FLUSH_NEVER); + hibernateTemplate.flush(); + verify(session).setFlushMode(FlushMode.MANUAL); + verify(session).flush(); + verify(session).close(); } + @Test public void testClear() throws HibernateException { - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.clear(); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.clear(); + hibernateTemplate.clear(); + verify(session).clear(); + verify(session).flush(); + verify(session).close(); } + @Test public void testFind() throws HibernateException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - + Query query = mock(Query.class); List list = new ArrayList(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.createQuery("some query string"); - sessionControl.setReturnValue(query, 1); - query.list(); - queryControl.setReturnValue(list, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - List result = ht.find("some query string"); + given(session.createQuery("some query string")).willReturn(query); + given(query.list()).willReturn(list); + List result = hibernateTemplate.find("some query string"); assertTrue("Correct list", result == list); - queryControl.verify(); + verify(session).flush(); + verify(session).close(); } + @Test public void testFindWithParameter() throws HibernateException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - + Query query = mock(Query.class); List list = new ArrayList(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.createQuery("some query string"); - sessionControl.setReturnValue(query, 1); - query.setParameter(0, "myvalue"); - queryControl.setReturnValue(query, 1); - query.list(); - queryControl.setReturnValue(list, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - List result = ht.find("some query string", "myvalue"); + given(session.createQuery("some query string")).willReturn(query); + given(query.setParameter(0, "myvalue")).willReturn(query); + given(query.list()).willReturn(list); + List result = hibernateTemplate.find("some query string", "myvalue"); assertTrue("Correct list", result == list); - queryControl.verify(); + verify(query).setParameter(0, "myvalue"); + verify(session).flush(); + verify(session).close(); } + @Test public void testFindWithParameters() throws HibernateException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - + Query query = mock(Query.class); List list = new ArrayList(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.createQuery("some query string"); - sessionControl.setReturnValue(query, 1); - query.setParameter(0, "myvalue1"); - queryControl.setReturnValue(query, 1); - query.setParameter(1, new Integer(2)); - queryControl.setReturnValue(query, 1); - query.list(); - queryControl.setReturnValue(list, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - List result = ht.find("some query string", new Object[] {"myvalue1", new Integer(2)}); + given(session.createQuery("some query string")).willReturn(query); + given(query.setParameter(0, "myvalue1")).willReturn(query); + given(query.setParameter(1, 2)).willReturn(query); + given(query.list()).willReturn(list); + List result = hibernateTemplate.find("some query string", new Object[] {"myvalue1", 2}); assertTrue("Correct list", result == list); - queryControl.verify(); + verify(query).setParameter(0, "myvalue1"); + verify(query).setParameter(1, 2); + verify(session).flush(); + verify(session).close(); } + @Test public void testFindWithNamedParameter() throws HibernateException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - + Query query = mock(Query.class); List list = new ArrayList(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.createQuery("some query string"); - sessionControl.setReturnValue(query, 1); - query.setParameter("myparam", "myvalue"); - queryControl.setReturnValue(query, 1); - query.list(); - queryControl.setReturnValue(list, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - List result = ht.findByNamedParam("some query string", "myparam", "myvalue"); + given(session.createQuery("some query string")).willReturn(query); + given(query.setParameter("myparam", "myvalue")).willReturn(query); + given(query.list()).willReturn(list); + List result = hibernateTemplate.findByNamedParam("some query string", "myparam", "myvalue"); assertTrue("Correct list", result == list); - queryControl.verify(); + verify(query).setParameter("myparam", "myvalue"); + verify(session).flush(); + verify(session).close(); } + @Test public void testFindWithNamedParameters() throws HibernateException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - + Query query = mock(Query.class); List list = new ArrayList(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.createQuery("some query string"); - sessionControl.setReturnValue(query, 1); - query.setParameter("myparam1", "myvalue1"); - queryControl.setReturnValue(query, 1); - query.setParameter("myparam2", new Integer(2)); - queryControl.setReturnValue(query, 1); - query.list(); - queryControl.setReturnValue(list, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - List result = ht.findByNamedParam("some query string", + given(session.createQuery("some query string")).willReturn(query); + given(query.setParameter("myparam1", "myvalue1")).willReturn(query); + given(query.setParameter("myparam2", 2)).willReturn(query); + given(query.list()).willReturn(list); + List result = hibernateTemplate.findByNamedParam("some query string", new String[] {"myparam1", "myparam2"}, - new Object[] {"myvalue1", new Integer(2)}); + new Object[] {"myvalue1", 2}); assertTrue("Correct list", result == list); - queryControl.verify(); + verify(query).setParameter("myparam1", "myvalue1"); + verify(query).setParameter("myparam2", 2); + verify(session).flush(); + verify(session).close(); } + @Test public void testFindByValueBean() throws HibernateException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - + Query query = mock(Query.class); TestBean tb = new TestBean(); List list = new ArrayList(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.createQuery("some query string"); - sessionControl.setReturnValue(query, 1); - query.setProperties(tb); - queryControl.setReturnValue(query, 1); - query.list(); - queryControl.setReturnValue(list, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - List result = ht.findByValueBean("some query string", tb); + given(session.createQuery("some query string")).willReturn(query); + given(query.setProperties(tb)).willReturn(query); + given(query.list()).willReturn(list); + List result = hibernateTemplate.findByValueBean("some query string", tb); assertTrue("Correct list", result == list); - queryControl.verify(); + verify(query).setProperties(tb); + verify(session).flush(); + verify(session).close(); } + @Test public void testFindByNamedQuery() throws HibernateException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - + Query query = mock(Query.class); List list = new ArrayList(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getNamedQuery("some query name"); - sessionControl.setReturnValue(query, 1); - query.list(); - queryControl.setReturnValue(list, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - List result = ht.findByNamedQuery("some query name"); + given(session.getNamedQuery("some query name")).willReturn(query); + given(query.list()).willReturn(list); + List result = hibernateTemplate.findByNamedQuery("some query name"); assertTrue("Correct list", result == list); - queryControl.verify(); + verify(session).flush(); + verify(session).close(); } + @Test public void testFindByNamedQueryWithParameter() throws HibernateException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - + Query query = mock(Query.class); List list = new ArrayList(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getNamedQuery("some query name"); - sessionControl.setReturnValue(query, 1); - query.setParameter(0, "myvalue"); - queryControl.setReturnValue(query, 1); - query.list(); - queryControl.setReturnValue(list, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - List result = ht.findByNamedQuery("some query name", "myvalue"); + given(session.getNamedQuery("some query name")).willReturn(query); + given(query.setParameter(0, "myvalue")).willReturn(query); + given(query.list()).willReturn(list); + List result = hibernateTemplate.findByNamedQuery("some query name", "myvalue"); assertTrue("Correct list", result == list); - queryControl.verify(); + verify(query).setParameter(0, "myvalue"); + verify(session).flush(); + verify(session).close(); } + @Test public void testFindByNamedQueryWithParameters() throws HibernateException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - + Query query = mock(Query.class); List list = new ArrayList(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getNamedQuery("some query name"); - sessionControl.setReturnValue(query, 1); - query.setParameter(0, "myvalue1"); - queryControl.setReturnValue(query, 1); - query.setParameter(1, new Integer(2)); - queryControl.setReturnValue(query, 1); - query.list(); - queryControl.setReturnValue(list, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - List result = ht.findByNamedQuery("some query name", new Object[] {"myvalue1", new Integer(2)}); + given(session.getNamedQuery("some query name")).willReturn(query); + given(query.setParameter(0, "myvalue1")).willReturn(query); + given(query.setParameter(1, 2)).willReturn(query); + given(query.list()).willReturn(list); + List result = hibernateTemplate.findByNamedQuery("some query name", new Object[] {"myvalue1", 2}); assertTrue("Correct list", result == list); - queryControl.verify(); + verify(query).setParameter(0, "myvalue1"); + verify(query).setParameter(1, 2); + verify(session).flush(); + verify(session).close(); } + @Test public void testFindByNamedQueryWithNamedParameter() throws HibernateException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - + Query query = mock(Query.class); List list = new ArrayList(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getNamedQuery("some query name"); - sessionControl.setReturnValue(query, 1); - query.setParameter("myparam", "myvalue"); - queryControl.setReturnValue(query, 1); - query.list(); - queryControl.setReturnValue(list, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - List result = ht.findByNamedQueryAndNamedParam("some query name", "myparam", "myvalue"); + given(session.getNamedQuery("some query name")).willReturn(query); + given(query.setParameter("myparam", "myvalue")).willReturn(query); + given(query.list()).willReturn(list); + List result = hibernateTemplate.findByNamedQueryAndNamedParam("some query name", "myparam", "myvalue"); assertTrue("Correct list", result == list); - queryControl.verify(); + verify(query).setParameter("myparam", "myvalue"); + verify(session).flush(); + verify(session).close(); } + @Test public void testFindByNamedQueryWithNamedParameters() throws HibernateException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - + Query query = mock(Query.class); List list = new ArrayList(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getNamedQuery("some query name"); - sessionControl.setReturnValue(query, 1); - query.setParameter("myparam1", "myvalue1"); - queryControl.setReturnValue(query, 1); - query.setParameter("myparam2", new Integer(2)); - queryControl.setReturnValue(query, 1); - query.list(); - queryControl.setReturnValue(list, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - List result = ht.findByNamedQueryAndNamedParam("some query name", + given(session.getNamedQuery("some query name")).willReturn(query); + given(query.setParameter("myparam1", "myvalue1")).willReturn(query); + given(query.setParameter("myparam2", 2)).willReturn(query); + given(query.list()).willReturn(list); + List result = hibernateTemplate.findByNamedQueryAndNamedParam("some query name", new String[] {"myparam1", "myparam2"}, - new Object[] {"myvalue1", new Integer(2)}); + new Object[] {"myvalue1", 2}); assertTrue("Correct list", result == list); - queryControl.verify(); + verify(query).setParameter("myparam1", "myvalue1"); + verify(query).setParameter("myparam2", 2); + verify(session).flush(); + verify(session).close(); } + @Test public void testFindByNamedQueryAndValueBean() throws HibernateException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - + Query query = mock(Query.class); TestBean tb = new TestBean(); List list = new ArrayList(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getNamedQuery("some query name"); - sessionControl.setReturnValue(query, 1); - query.setProperties(tb); - queryControl.setReturnValue(query, 1); - query.list(); - queryControl.setReturnValue(list, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - List result = ht.findByNamedQueryAndValueBean("some query name", tb); + given(session.getNamedQuery("some query name")).willReturn(query); + given(query.setProperties(tb)).willReturn(query); + given(query.list()).willReturn(list); + List result = hibernateTemplate.findByNamedQueryAndValueBean("some query name", tb); assertTrue("Correct list", result == list); - queryControl.verify(); + verify(query).setProperties(tb); + verify(session).flush(); + verify(session).close(); } + @Test public void testFindWithCacheable() throws HibernateException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - + Query query = mock(Query.class); List list = new ArrayList(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.createQuery("some query string"); - sessionControl.setReturnValue(query, 1); - query.setCacheable(true); - queryControl.setReturnValue(query, 1); - query.list(); - queryControl.setReturnValue(list, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setCacheQueries(true); - List result = ht.find("some query string"); + given(session.createQuery("some query string")).willReturn(query); + given(query.setCacheable(true)).willReturn(query); + given(query.list()).willReturn(list); + hibernateTemplate.setCacheQueries(true); + List result = hibernateTemplate.find("some query string"); assertTrue("Correct list", result == list); - sfControl.verify(); + verify(query).setCacheable(true); + verify(session).flush(); + verify(session).close(); } + @Test public void testFindWithCacheableAndCacheRegion() throws HibernateException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - + Query query = mock(Query.class); List list = new ArrayList(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.createQuery("some query string"); - sessionControl.setReturnValue(query, 1); - query.setCacheable(true); - queryControl.setReturnValue(query, 1); - query.setCacheRegion("myCacheRegion"); - queryControl.setReturnValue(query, 1); - query.list(); - queryControl.setReturnValue(list, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setCacheQueries(true); - ht.setQueryCacheRegion("myCacheRegion"); - List result = ht.find("some query string"); + given(session.createQuery("some query string")).willReturn(query); + given(query.setCacheable(true)).willReturn(query); + given(query.setCacheRegion("myCacheRegion")).willReturn(query); + given(query.list()).willReturn(list); + hibernateTemplate.setCacheQueries(true); + hibernateTemplate.setQueryCacheRegion("myCacheRegion"); + List result = hibernateTemplate.find("some query string"); assertTrue("Correct list", result == list); - sfControl.verify(); + verify(query).setCacheable(true); + verify(query).setCacheRegion("myCacheRegion"); + verify(session).flush(); + verify(session).close(); } + @Test public void testFindByNamedQueryWithCacheable() throws HibernateException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - + Query query = mock(Query.class); List list = new ArrayList(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getNamedQuery("some query name"); - sessionControl.setReturnValue(query, 1); - query.setCacheable(true); - queryControl.setReturnValue(query, 1); - query.list(); - queryControl.setReturnValue(list, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setCacheQueries(true); - List result = ht.findByNamedQuery("some query name"); + given(session.getNamedQuery("some query name")).willReturn(query); + given(query.setCacheable(true)).willReturn(query); + given(query.list()).willReturn(list); + hibernateTemplate.setCacheQueries(true); + List result = hibernateTemplate.findByNamedQuery("some query name"); assertTrue("Correct list", result == list); - queryControl.verify(); + verify(query).setCacheable(true); + verify(session).flush(); + verify(session).close(); } + @Test public void testFindByNamedQueryWithCacheableAndCacheRegion() throws HibernateException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - + Query query = mock(Query.class); List list = new ArrayList(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getNamedQuery("some query name"); - sessionControl.setReturnValue(query, 1); - query.setCacheable(true); - queryControl.setReturnValue(query, 1); - query.setCacheRegion("myCacheRegion"); - queryControl.setReturnValue(query, 1); - query.list(); - queryControl.setReturnValue(list, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - ht.setCacheQueries(true); - ht.setQueryCacheRegion("myCacheRegion"); - List result = ht.findByNamedQuery("some query name"); + given(session.getNamedQuery("some query name")).willReturn(query); + given(query.setCacheable(true)).willReturn(query); + given(query.setCacheRegion("myCacheRegion")).willReturn(query); + given(query.list()).willReturn(list); + hibernateTemplate.setCacheQueries(true); + hibernateTemplate.setQueryCacheRegion("myCacheRegion"); + List result = hibernateTemplate.findByNamedQuery("some query name"); assertTrue("Correct list", result == list); - queryControl.verify(); + verify(query).setCacheable(true); + verify(query).setCacheRegion("myCacheRegion"); + verify(session).flush(); + verify(session).close(); } + @Test public void testIterate() throws HibernateException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - + Query query = mock(Query.class); Iterator it = Collections.EMPTY_LIST.iterator(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.createQuery("some query string"); - sessionControl.setReturnValue(query, 1); - query.iterate(); - queryControl.setReturnValue(it, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - Iterator result = ht.iterate("some query string"); + given(session.createQuery("some query string")).willReturn(query); + given(query.iterate()).willReturn(it); + Iterator result = hibernateTemplate.iterate("some query string"); assertTrue("Correct list", result == it); - queryControl.verify(); + verify(session).flush(); + verify(session).close(); } + @Test public void testIterateWithParameter() throws HibernateException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - + Query query = mock(Query.class); Iterator it = Collections.EMPTY_LIST.iterator(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.createQuery("some query string"); - sessionControl.setReturnValue(query, 1); - query.setParameter(0, "myvalue"); - queryControl.setReturnValue(query, 1); - query.iterate(); - queryControl.setReturnValue(it, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - Iterator result = ht.iterate("some query string", "myvalue"); + given(session.createQuery("some query string")).willReturn(query); + given(query.setParameter(0, "myvalue")).willReturn(query); + given(query.iterate()).willReturn(it); + Iterator result = hibernateTemplate.iterate("some query string", "myvalue"); assertTrue("Correct list", result == it); - queryControl.verify(); + verify(query).setParameter(0, "myvalue"); + verify(session).flush(); + verify(session).close(); } + @Test public void testIterateWithParameters() throws HibernateException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - + Query query = mock(Query.class); Iterator it = Collections.EMPTY_LIST.iterator(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.createQuery("some query string"); - sessionControl.setReturnValue(query, 1); - query.setParameter(0, "myvalue1"); - queryControl.setReturnValue(query, 1); - query.setParameter(1, new Integer(2)); - queryControl.setReturnValue(query, 1); - query.iterate(); - queryControl.setReturnValue(it, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - Iterator result = ht.iterate("some query string", - new Object[] {"myvalue1", new Integer(2)}); + given(session.createQuery("some query string")).willReturn(query); + given(query.setParameter(0, "myvalue1")).willReturn(query); + given(query.setParameter(1, 2)).willReturn(query); + given(query.iterate()).willReturn(it); + Iterator result = hibernateTemplate.iterate("some query string", + new Object[] {"myvalue1", 2}); assertTrue("Correct list", result == it); - sfControl.verify(); + verify(query).setParameter(0, "myvalue1"); + verify(query).setParameter(1, 2); + verify(session).flush(); + verify(session).close(); } + @Test public void testBulkUpdate() throws HibernateException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.createQuery("some query string"); - sessionControl.setReturnValue(query, 1); - query.executeUpdate(); - queryControl.setReturnValue(5, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - int result = ht.bulkUpdate("some query string"); + Query query = mock(Query.class); + given(session.createQuery("some query string")).willReturn(query); + given(query.executeUpdate()).willReturn(5); + int result = hibernateTemplate.bulkUpdate("some query string"); assertTrue("Correct list", result == 5); - queryControl.verify(); + verify(session).flush(); + verify(session).close(); } + @Test public void testBulkUpdateWithParameter() throws HibernateException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.createQuery("some query string"); - sessionControl.setReturnValue(query, 1); - query.setParameter(0, "myvalue"); - queryControl.setReturnValue(query, 1); - query.executeUpdate(); - queryControl.setReturnValue(5, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - int result = ht.bulkUpdate("some query string", "myvalue"); + Query query = mock(Query.class); + given(session.createQuery("some query string")).willReturn(query); + given(query.setParameter(0, "myvalue")).willReturn(query); + given(query.executeUpdate()).willReturn(5); + int result = hibernateTemplate.bulkUpdate("some query string", "myvalue"); assertTrue("Correct list", result == 5); - queryControl.verify(); + verify(query).setParameter(0, "myvalue"); + verify(session).flush(); + verify(session).close(); } + @Test public void testBulkUpdateWithParameters() throws HibernateException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.createQuery("some query string"); - sessionControl.setReturnValue(query, 1); - query.setParameter(0, "myvalue1"); - queryControl.setReturnValue(query, 1); - query.setParameter(1, new Integer(2)); - queryControl.setReturnValue(query, 1); - query.executeUpdate(); - queryControl.setReturnValue(5, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - queryControl.replay(); - - HibernateTemplate ht = new HibernateTemplate(sf); - int result = ht.bulkUpdate("some query string", - new Object[] {"myvalue1", new Integer(2)}); + Query query = mock(Query.class); + given(session.createQuery("some query string")).willReturn(query); + given(query.setParameter(0, "myvalue1")).willReturn(query); + given(query.setParameter(1, 2)).willReturn(query); + given(query.executeUpdate()).willReturn(5); + int result = hibernateTemplate.bulkUpdate("some query string", + new Object[] {"myvalue1", 2}); assertTrue("Correct list", result == 5); - queryControl.verify(); + verify(query).setParameter(0, "myvalue1"); + verify(query).setParameter(1, 2); + verify(session).flush(); + verify(session).close(); } + @Test public void testExceptions() throws HibernateException { SQLException sqlEx = new SQLException("argh", "27"); final JDBCConnectionException jcex = new JDBCConnectionException("mymsg", sqlEx); try { - createTemplate().execute(new HibernateCallback() { + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw jcex; @@ -2305,7 +1326,7 @@ public class HibernateTemplateTests extends TestCase { final SQLGrammarException sgex = new SQLGrammarException("mymsg", sqlEx); try { - createTemplate().execute(new HibernateCallback() { + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw sgex; @@ -2321,7 +1342,7 @@ public class HibernateTemplateTests extends TestCase { final LockAcquisitionException laex = new LockAcquisitionException("mymsg", sqlEx); try { - createTemplate().execute(new HibernateCallback() { + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw laex; @@ -2337,7 +1358,7 @@ public class HibernateTemplateTests extends TestCase { final ConstraintViolationException cvex = new ConstraintViolationException("mymsg", sqlEx, "myconstraint"); try { - createTemplate().execute(new HibernateCallback() { + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw cvex; @@ -2353,7 +1374,7 @@ public class HibernateTemplateTests extends TestCase { final DataException dex = new DataException("mymsg", sqlEx); try { - createTemplate().execute(new HibernateCallback() { + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw dex; @@ -2369,7 +1390,7 @@ public class HibernateTemplateTests extends TestCase { final JDBCException jdex = new JDBCException("mymsg", sqlEx); try { - createTemplate().execute(new HibernateCallback() { + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw jdex; @@ -2385,7 +1406,7 @@ public class HibernateTemplateTests extends TestCase { final PropertyValueException pvex = new PropertyValueException("mymsg", "myentity", "myproperty"); try { - createTemplate().execute(new HibernateCallback() { + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw pvex; @@ -2400,7 +1421,7 @@ public class HibernateTemplateTests extends TestCase { } try { - createTemplate().execute(new HibernateCallback() { + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw new PersistentObjectException(""); @@ -2413,7 +1434,7 @@ public class HibernateTemplateTests extends TestCase { } try { - createTemplate().execute(new HibernateCallback() { + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw new TransientObjectException(""); @@ -2427,7 +1448,7 @@ public class HibernateTemplateTests extends TestCase { final ObjectDeletedException odex = new ObjectDeletedException("msg", "id", TestBean.class.getName()); try { - createTemplate().execute(new HibernateCallback() { + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw odex; @@ -2443,7 +1464,7 @@ public class HibernateTemplateTests extends TestCase { final QueryException qex = new QueryException("msg"); qex.setQueryString("query"); try { - createTemplate().execute(new HibernateCallback() { + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw qex; @@ -2459,7 +1480,7 @@ public class HibernateTemplateTests extends TestCase { final UnresolvableObjectException uoex = new UnresolvableObjectException("id", TestBean.class.getName()); try { - createTemplate().execute(new HibernateCallback() { + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw uoex; @@ -2476,7 +1497,7 @@ public class HibernateTemplateTests extends TestCase { final ObjectNotFoundException onfe = new ObjectNotFoundException("id", TestBean.class.getName()); try { - createTemplate().execute(new HibernateCallback() { + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw onfe; @@ -2493,7 +1514,7 @@ public class HibernateTemplateTests extends TestCase { final WrongClassException wcex = new WrongClassException("msg", "id", TestBean.class.getName()); try { - createTemplate().execute(new HibernateCallback() { + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw wcex; @@ -2510,7 +1531,7 @@ public class HibernateTemplateTests extends TestCase { final NonUniqueResultException nuex = new NonUniqueResultException(2); try { - createTemplate().execute(new HibernateCallback() { + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw nuex; @@ -2526,7 +1547,7 @@ public class HibernateTemplateTests extends TestCase { final StaleObjectStateException sosex = new StaleObjectStateException(TestBean.class.getName(), "id"); try { - createTemplate().execute(new HibernateCallback() { + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw sosex; @@ -2543,7 +1564,7 @@ public class HibernateTemplateTests extends TestCase { final StaleStateException ssex = new StaleStateException("msg"); try { - createTemplate().execute(new HibernateCallback() { + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw ssex; @@ -2560,7 +1581,7 @@ public class HibernateTemplateTests extends TestCase { final HibernateException hex = new HibernateException("msg"); try { - createTemplate().execute(new HibernateCallback() { + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw hex; @@ -2574,12 +1595,13 @@ public class HibernateTemplateTests extends TestCase { } } + @Test public void testFallbackExceptionTranslation() throws HibernateException { SQLException sqlEx = new SQLException("argh", "27"); final GenericJDBCException gjex = new GenericJDBCException("mymsg", sqlEx); try { - createTemplate().execute(new HibernateCallback() { + hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate(org.hibernate.Session session) throws HibernateException { throw gjex; @@ -2593,32 +1615,4 @@ public class HibernateTemplateTests extends TestCase { assertTrue(ex.getMessage().indexOf("mymsg") != -1); } } - - private HibernateTemplate createTemplate() throws HibernateException { - sfControl.reset(); - sessionControl.reset(); - sf.openSession(); - sfControl.setReturnValue(session); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - return new HibernateTemplate(sf); - } - - @Override - protected void tearDown() { - try { - sfControl.verify(); - sessionControl.verify(); - } - catch (IllegalStateException ex) { - // ignore: test method didn't call replay - } - assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); - assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); - } - } diff --git a/spring-orm/src/test/java/org/springframework/orm/hibernate3/HibernateTransactionManagerTests.java b/spring-orm/src/test/java/org/springframework/orm/hibernate3/HibernateTransactionManagerTests.java index 707d17b9fe4..534beea6566 100644 --- a/spring-orm/src/test/java/org/springframework/orm/hibernate3/HibernateTransactionManagerTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/hibernate3/HibernateTransactionManagerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,18 @@ package org.springframework.orm.hibernate3; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willThrow; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.SQLException; @@ -23,10 +35,9 @@ import java.sql.Savepoint; import java.util.ArrayList; import java.util.List; import java.util.Properties; + import javax.sql.DataSource; -import junit.framework.TestCase; -import org.easymock.MockControl; import org.hibernate.FlushMode; import org.hibernate.HibernateException; import org.hibernate.Interceptor; @@ -39,7 +50,9 @@ import org.hibernate.classic.Session; import org.hibernate.dialect.HSQLDialect; import org.hibernate.exception.ConstraintViolationException; import org.hibernate.exception.GenericJDBCException; - +import org.junit.After; +import org.junit.Test; +import org.mockito.InOrder; import org.springframework.beans.factory.BeanFactory; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.jdbc.datasource.ConnectionHolder; @@ -58,63 +71,38 @@ import org.springframework.transaction.support.TransactionTemplate; /** * @author Juergen Hoeller + * @author Phillip Webb * @since 05.03.2005 */ -public class HibernateTransactionManagerTests extends TestCase { +public class HibernateTransactionManagerTests { + @After + public void tearDown() { + assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); + assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); + assertFalse(TransactionSynchronizationManager.isCurrentTransactionReadOnly()); + assertFalse(TransactionSynchronizationManager.isActualTransactionActive()); + } + + @Test public void testTransactionCommit() throws Exception { - MockControl dsControl = MockControl.createControl(DataSource.class); - final DataSource ds = (DataSource) dsControl.getMock(); - MockControl conControl = MockControl.createControl(Connection.class); - Connection con = (Connection) conControl.getMock(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); - MockControl txControl = MockControl.createControl(Transaction.class); - Transaction tx = (Transaction) txControl.getMock(); - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); + final DataSource ds = mock(DataSource.class); + Connection con = mock(Connection.class); + final SessionFactory sf = mock(SessionFactory.class); + final Session session = mock(Session.class); + Transaction tx = mock(Transaction.class); + Query query = mock(Query.class); final List list = new ArrayList(); list.add("test"); - con.getTransactionIsolation(); - conControl.setReturnValue(Connection.TRANSACTION_READ_COMMITTED); - con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); - conControl.setVoidCallable(1); - con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); - conControl.setVoidCallable(1); - con.isReadOnly(); - conControl.setReturnValue(false, 1); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getTransaction(); - sessionControl.setReturnValue(tx, 1); - tx.setTimeout(10); - txControl.setVoidCallable(1); - tx.begin(); - txControl.setVoidCallable(1); - session.connection(); - sessionControl.setReturnValue(con, 3); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.createQuery("some query string"); - sessionControl.setReturnValue(query, 1); - query.list(); - queryControl.setReturnValue(list, 1); - tx.commit(); - txControl.setVoidCallable(1); - session.isConnected(); - sessionControl.setReturnValue(true, 1); - session.close(); - sessionControl.setReturnValue(null, 1); - - dsControl.replay(); - conControl.replay(); - sfControl.replay(); - sessionControl.replay(); - txControl.replay(); - queryControl.replay(); + given(con.getTransactionIsolation()).willReturn(Connection.TRANSACTION_READ_COMMITTED); + given(sf.openSession()).willReturn(session); + given(session.getTransaction()).willReturn(tx); + given(session.connection()).willReturn(con); + given(session.isOpen()).willReturn(true); + given(session.createQuery("some query string")).willReturn(query); + given(query.list()).willReturn(list); + given(session.isConnected()).willReturn(true); LocalSessionFactoryBean lsfb = new LocalSessionFactoryBean() { @Override @@ -152,44 +140,27 @@ public class HibernateTransactionManagerTests extends TestCase { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sfProxy)); assertTrue("Hasn't thread connection", !TransactionSynchronizationManager.hasResource(ds)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - dsControl.verify(); - conControl.verify(); - sfControl.verify(); - sessionControl.verify(); - txControl.verify(); - queryControl.verify(); + + verify(con).setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); + verify(con).setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); + verify(tx).setTimeout(10); + verify(tx).begin(); + verify(tx).commit(); + verify(session).close(); } + @Test public void testTransactionRollback() throws Exception { - MockControl conControl = MockControl.createControl(Connection.class); - Connection con = (Connection) conControl.getMock(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - MockControl txControl = MockControl.createControl(Transaction.class); - Transaction tx = (Transaction) txControl.getMock(); + Connection con = mock(Connection.class); + final SessionFactory sf = mock(SessionFactory.class); + Session session = mock(Session.class); + Transaction tx = mock(Transaction.class); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.beginTransaction(); - sessionControl.setReturnValue(tx, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.close(); - sessionControl.setReturnValue(null, 1); - tx.rollback(); - txControl.setVoidCallable(1); - session.isConnected(); - sessionControl.setReturnValue(true, 1); - session.connection(); - sessionControl.setReturnValue(con, 2); - con.isReadOnly(); - conControl.setReturnValue(false, 1); - - sfControl.replay(); - sessionControl.replay(); - txControl.replay(); + given(sf.openSession()).willReturn(session); + given(session.beginTransaction()).willReturn(tx); + given(session.isOpen()).willReturn(true); + given(session.isConnected()).willReturn(true); + given(session.connection()).willReturn(con); PlatformTransactionManager tm = new HibernateTransactionManager(sf); TransactionTemplate tt = new TransactionTemplate(tm); @@ -218,44 +189,23 @@ public class HibernateTransactionManagerTests extends TestCase { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - sfControl.verify(); - sessionControl.verify(); - txControl.verify(); + verify(session).close(); + verify(tx).rollback(); } + @Test public void testTransactionRollbackOnly() throws Exception { - MockControl conControl = MockControl.createControl(Connection.class); - Connection con = (Connection) conControl.getMock(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - MockControl txControl = MockControl.createControl(Transaction.class); - Transaction tx = (Transaction) txControl.getMock(); + Connection con = mock(Connection.class); + final SessionFactory sf = mock(SessionFactory.class); + Session session = mock(Session.class); + Transaction tx = mock(Transaction.class); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.beginTransaction(); - sessionControl.setReturnValue(tx, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - tx.rollback(); - txControl.setVoidCallable(1); - session.isConnected(); - sessionControl.setReturnValue(true, 1); - session.connection(); - sessionControl.setReturnValue(con, 2); - con.isReadOnly(); - conControl.setReturnValue(false, 1); - sfControl.replay(); - sessionControl.replay(); - txControl.replay(); + given(sf.openSession()).willReturn(session); + given(session.beginTransaction()).willReturn(tx); + given(session.isOpen()).willReturn(true); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + given(session.isConnected()).willReturn(true); + given(session.connection()).willReturn(con); PlatformTransactionManager tm = new HibernateTransactionManager(sf); TransactionTemplate tt = new TransactionTemplate(tm); @@ -279,70 +229,31 @@ public class HibernateTransactionManagerTests extends TestCase { }); assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); - sfControl.verify(); - sessionControl.verify(); - txControl.verify(); + verify(session).flush(); + verify(session).close(); + verify(tx).rollback(); } + @Test public void testTransactionCommitWithEarlyFlush() throws Exception { - MockControl dsControl = MockControl.createControl(DataSource.class); - final DataSource ds = (DataSource) dsControl.getMock(); - MockControl conControl = MockControl.createControl(Connection.class); - Connection con = (Connection) conControl.getMock(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); - MockControl txControl = MockControl.createControl(Transaction.class); - Transaction tx = (Transaction) txControl.getMock(); - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); + final DataSource ds = mock(DataSource.class); + Connection con = mock(Connection.class); + final SessionFactory sf = mock(SessionFactory.class); + final Session session = mock(Session.class); + Transaction tx = mock(Transaction.class); + Query query = mock(Query.class); final List list = new ArrayList(); list.add("test"); - con.getTransactionIsolation(); - conControl.setReturnValue(Connection.TRANSACTION_READ_COMMITTED); - con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); - conControl.setVoidCallable(1); - con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); - conControl.setVoidCallable(1); - con.isReadOnly(); - conControl.setReturnValue(false, 1); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getTransaction(); - sessionControl.setReturnValue(tx, 1); - tx.setTimeout(10); - txControl.setVoidCallable(1); - tx.begin(); - txControl.setVoidCallable(1); - session.connection(); - sessionControl.setReturnValue(con, 3); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.createQuery("some query string"); - sessionControl.setReturnValue(query, 1); - query.list(); - queryControl.setReturnValue(list, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.setFlushMode(FlushMode.MANUAL); - sessionControl.setVoidCallable(1); - tx.commit(); - txControl.setVoidCallable(1); - session.isConnected(); - sessionControl.setReturnValue(true, 1); - session.close(); - sessionControl.setReturnValue(null, 1); - - dsControl.replay(); - conControl.replay(); - sfControl.replay(); - sessionControl.replay(); - txControl.replay(); - queryControl.replay(); + given(con.getTransactionIsolation()).willReturn(Connection.TRANSACTION_READ_COMMITTED); + given(sf.openSession()).willReturn(session); + given(session.getTransaction()).willReturn(tx); + given(session.connection()).willReturn(con); + given(session.isOpen()).willReturn(true); + given(session.createQuery("some query string")).willReturn(query); + given(query.list()).willReturn(list); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + given(session.isConnected()).willReturn(true); LocalSessionFactoryBean lsfb = new LocalSessionFactoryBean() { @Override @@ -381,47 +292,30 @@ public class HibernateTransactionManagerTests extends TestCase { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sfProxy)); assertTrue("Hasn't thread connection", !TransactionSynchronizationManager.hasResource(ds)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - dsControl.verify(); - conControl.verify(); - sfControl.verify(); - sessionControl.verify(); - txControl.verify(); - queryControl.verify(); + InOrder ordered = inOrder(con); + ordered.verify(con).setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); + ordered.verify(con).setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); + verify(tx).setTimeout(10); + verify(tx).begin(); + verify(session).flush(); + verify(session).setFlushMode(FlushMode.MANUAL); + verify(tx).commit(); + verify(session).close(); } + @Test public void testParticipatingTransactionWithCommit() throws Exception { - MockControl conControl = MockControl.createControl(Connection.class); - Connection con = (Connection) conControl.getMock(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); - MockControl txControl = MockControl.createControl(Transaction.class); - Transaction tx = (Transaction) txControl.getMock(); + Connection con = mock(Connection.class); + final SessionFactory sf = mock(SessionFactory.class); + final Session session = mock(Session.class); + Transaction tx = mock(Transaction.class); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.beginTransaction(); - sessionControl.setReturnValue(tx, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO, 1); - session.flush(); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - tx.commit(); - txControl.setVoidCallable(1); - session.isConnected(); - sessionControl.setReturnValue(true, 1); - session.connection(); - sessionControl.setReturnValue(con, 2); - con.isReadOnly(); - conControl.setReturnValue(false, 1); - sfControl.replay(); - sessionControl.replay(); - txControl.replay(); + given(sf.openSession()).willReturn(session); + given(session.beginTransaction()).willReturn(tx); + given(session.isOpen()).willReturn(true); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + given(session.isConnected()).willReturn(true); + given(session.connection()).willReturn(con); LocalSessionFactoryBean lsfb = new LocalSessionFactoryBean() { @Override @@ -457,42 +351,24 @@ public class HibernateTransactionManagerTests extends TestCase { }); assertTrue("Correct result list", result == l); - sfControl.verify(); - sessionControl.verify(); - txControl.verify(); + verify(session).flush(); + verify(session).close(); + verify(tx).commit(); } + @Test public void testParticipatingTransactionWithRollback() throws Exception { - MockControl conControl = MockControl.createControl(Connection.class); - Connection con = (Connection) conControl.getMock(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - MockControl txControl = MockControl.createControl(Transaction.class); - Transaction tx = (Transaction) txControl.getMock(); + Connection con = mock(Connection.class); + final SessionFactory sf = mock(SessionFactory.class); + Session session = mock(Session.class); + Transaction tx = mock(Transaction.class); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.beginTransaction(); - sessionControl.setReturnValue(tx, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO, 1); - session.close(); - sessionControl.setReturnValue(null, 1); - tx.rollback(); - txControl.setVoidCallable(1); - session.isConnected(); - sessionControl.setReturnValue(true, 1); - session.connection(); - sessionControl.setReturnValue(con, 2); - con.isReadOnly(); - conControl.setReturnValue(false, 1); - sfControl.replay(); - sessionControl.replay(); - txControl.replay(); + given(sf.openSession()).willReturn(session); + given(session.beginTransaction()).willReturn(tx); + given(session.isOpen()).willReturn(true); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + given(session.isConnected()).willReturn(true); + given(session.connection()).willReturn(con); PlatformTransactionManager tm = new HibernateTransactionManager(sf); final TransactionTemplate tt = new TransactionTemplate(tm); @@ -521,40 +397,22 @@ public class HibernateTransactionManagerTests extends TestCase { // expected } - sfControl.verify(); - sessionControl.verify(); - txControl.verify(); + verify(session).close(); + verify(tx).rollback(); } + @Test public void testParticipatingTransactionWithRollbackOnly() throws Exception { - MockControl conControl = MockControl.createControl(Connection.class); - Connection con = (Connection) conControl.getMock(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - MockControl txControl = MockControl.createControl(Transaction.class); - Transaction tx = (Transaction) txControl.getMock(); + Connection con = mock(Connection.class); + final SessionFactory sf = mock(SessionFactory.class); + Session session = mock(Session.class); + Transaction tx = mock(Transaction.class); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.beginTransaction(); - sessionControl.setReturnValue(tx, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.close(); - sessionControl.setReturnValue(null, 1); - tx.rollback(); - txControl.setVoidCallable(1); - session.isConnected(); - sessionControl.setReturnValue(true, 1); - session.connection(); - sessionControl.setReturnValue(con, 2); - con.isReadOnly(); - conControl.setReturnValue(false, 1); - sfControl.replay(); - sessionControl.replay(); - txControl.replay(); + given(sf.openSession()).willReturn(session); + given(session.beginTransaction()).willReturn(tx); + given(session.isOpen()).willReturn(true); + given(session.isConnected()).willReturn(true); + given(session.connection()).willReturn(con); PlatformTransactionManager tm = new HibernateTransactionManager(sf); final TransactionTemplate tt = new TransactionTemplate(tm); @@ -587,61 +445,28 @@ public class HibernateTransactionManagerTests extends TestCase { // expected } - sfControl.verify(); - sessionControl.verify(); - txControl.verify(); + verify(session).close(); + verify(tx).rollback(); } + @Test public void testParticipatingTransactionWithWithRequiresNew() throws Exception { - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl session1Control = MockControl.createControl(Session.class); - Session session1 = (Session) session1Control.getMock(); - MockControl session2Control = MockControl.createControl(Session.class); - Session session2 = (Session) session2Control.getMock(); - MockControl conControl = MockControl.createControl(Connection.class); - Connection con = (Connection) conControl.getMock(); - MockControl txControl = MockControl.createControl(Transaction.class); - Transaction tx = (Transaction) txControl.getMock(); + final SessionFactory sf = mock(SessionFactory.class); + Session session1 = mock(Session.class); + Session session2 = mock(Session.class); + Connection con = mock(Connection.class); + Transaction tx = mock(Transaction.class); - sf.openSession(); - sfControl.setReturnValue(session1, 1); - sf.openSession(); - sfControl.setReturnValue(session2, 1); - session1.beginTransaction(); - session1Control.setReturnValue(tx, 1); - session1.isOpen(); - session1Control.setReturnValue(true, 1); - session2.beginTransaction(); - session2Control.setReturnValue(tx, 1); - session2.isOpen(); - session2Control.setReturnValue(true, 1); - session2.getFlushMode(); - session2Control.setReturnValue(FlushMode.AUTO, 1); - session2.flush(); - session2Control.setVoidCallable(1); - session1.close(); - session1Control.setReturnValue(null, 1); - session2.close(); - session2Control.setReturnValue(null, 1); - tx.commit(); - txControl.setVoidCallable(2); - session1.isConnected(); - session1Control.setReturnValue(true, 1); - session1.connection(); - session1Control.setReturnValue(con, 2); - session2.isConnected(); - session2Control.setReturnValue(true, 1); - session2.connection(); - session2Control.setReturnValue(con, 2); - con.isReadOnly(); - conControl.setReturnValue(false, 2); - - sfControl.replay(); - session1Control.replay(); - session2Control.replay(); - conControl.replay(); - txControl.replay(); + given(sf.openSession()).willReturn(session1, session2); + given(session1.beginTransaction()).willReturn(tx); + given(session1.isOpen()).willReturn(true); + given(session2.beginTransaction()).willReturn(tx); + given(session2.isOpen()).willReturn(true); + given(session2.getFlushMode()).willReturn(FlushMode.AUTO); + given(session1.isConnected()).willReturn(true); + given(session1.connection()).willReturn(con); + given(session2.isConnected()).willReturn(true); + given(session2.connection()).willReturn(con); PlatformTransactionManager tm = new HibernateTransactionManager(sf); final TransactionTemplate tt = new TransactionTemplate(tm); @@ -680,50 +505,26 @@ public class HibernateTransactionManagerTests extends TestCase { }); assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); - sfControl.verify(); - session1Control.verify(); - session2Control.verify(); - conControl.verify(); - txControl.verify(); + verify(session2).flush(); + verify(session1).close(); + verify(session2).close(); + verify(tx, times(2)).commit(); } + @Test public void testParticipatingTransactionWithWithNotSupported() throws Exception { - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - MockControl conControl = MockControl.createControl(Connection.class); - Connection con = (Connection) conControl.getMock(); - MockControl txControl = MockControl.createControl(Transaction.class); - Transaction tx = (Transaction) txControl.getMock(); + final SessionFactory sf = mock(SessionFactory.class); + Session session = mock(Session.class); + Connection con = mock(Connection.class); + Transaction tx = mock(Transaction.class); - sf.openSession(); - sfControl.setReturnValue(session, 2); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.beginTransaction(); - sessionControl.setReturnValue(tx, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.AUTO, 2); - session.flush(); - sessionControl.setVoidCallable(2); - session.close(); - sessionControl.setReturnValue(null, 2); - tx.commit(); - txControl.setVoidCallable(1); - session.isConnected(); - sessionControl.setReturnValue(true, 1); - session.connection(); - sessionControl.setReturnValue(con, 2); - con.isReadOnly(); - conControl.setReturnValue(false, 1); - - sfControl.replay(); - sessionControl.replay(); - conControl.replay(); - txControl.replay(); + given(sf.openSession()).willReturn(session); + given(session.getSessionFactory()).willReturn(sf); + given(session.beginTransaction()).willReturn(tx); + given(session.isOpen()).willReturn(true); + given(session.getFlushMode()).willReturn(FlushMode.AUTO); + given(session.isConnected()).willReturn(true); + given(session.connection()).willReturn(con); HibernateTransactionManager tm = new HibernateTransactionManager(sf); final TransactionTemplate tt = new TransactionTemplate(tm); @@ -763,35 +564,19 @@ public class HibernateTransactionManagerTests extends TestCase { }); assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); - sfControl.verify(); - sessionControl.verify(); - txControl.verify(); + verify(session, times(2)).flush(); + verify(session, times(2)).close(); + verify(tx).commit(); } + @Test public void testTransactionWithPropagationSupports() throws Exception { - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); + final SessionFactory sf = mock(SessionFactory.class); + final Session session = mock(Session.class); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.MANUAL, 1); - session.setFlushMode(FlushMode.AUTO); - sessionControl.setVoidCallable(1); - session.flush(); - sessionControl.setVoidCallable(1); - session.setFlushMode(FlushMode.MANUAL); - sessionControl.setVoidCallable(1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.MANUAL, 1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); + given(sf.openSession()).willReturn(session); + given(session.getSessionFactory()).willReturn(sf); + given(session.getFlushMode()).willReturn(FlushMode.MANUAL); LocalSessionFactoryBean lsfb = new LocalSessionFactoryBean() { @Override @@ -828,57 +613,29 @@ public class HibernateTransactionManagerTests extends TestCase { }); assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sfProxy)); - sfControl.verify(); - sessionControl.verify(); + InOrder ordered = inOrder(session); + ordered.verify(session).setFlushMode(FlushMode.AUTO); + ordered.verify(session).flush(); + ordered.verify(session).setFlushMode(FlushMode.MANUAL); + ordered.verify(session).close(); } + @Test public void testTransactionWithPropagationSupportsAndInnerTransaction() throws Exception { - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl session1Control = MockControl.createControl(Session.class); - final Session session1 = (Session) session1Control.getMock(); - MockControl session2Control = MockControl.createControl(Session.class); - final Session session2 = (Session) session2Control.getMock(); - MockControl conControl = MockControl.createControl(Connection.class); - Connection con = (Connection) conControl.getMock(); - MockControl txControl = MockControl.createControl(Transaction.class); - Transaction tx = (Transaction) txControl.getMock(); + final SessionFactory sf = mock(SessionFactory.class); + final Session session1 = mock(Session.class); + final Session session2 = mock(Session.class); + Connection con = mock(Connection.class); + Transaction tx = mock(Transaction.class); - sf.openSession(); - sfControl.setReturnValue(session1, 1); - session1.getSessionFactory(); - session1Control.setReturnValue(sf, 1); - session1.getFlushMode(); - session1Control.setReturnValue(FlushMode.AUTO, 2); - session1.flush(); - session1Control.setVoidCallable(2); - session1.disconnect(); - session1Control.setReturnValue(null, 1); - session1.close(); - session1Control.setReturnValue(null, 1); - - sf.openSession(); - sfControl.setReturnValue(session2, 1); - session2.beginTransaction(); - session2Control.setReturnValue(tx, 1); - session2.connection(); - session2Control.setReturnValue(con, 2); - session2.getFlushMode(); - session2Control.setReturnValue(FlushMode.AUTO, 1); - session2.flush(); - session2Control.setVoidCallable(1); - session2.isOpen(); - session2Control.setReturnValue(true, 1); - tx.commit(); - txControl.setVoidCallable(1); - session2.isConnected(); - session2Control.setReturnValue(true, 1); - session2.close(); - session2Control.setReturnValue(null, 1); - sfControl.replay(); - session1Control.replay(); - session2Control.replay(); - txControl.replay(); + given(sf.openSession()).willReturn(session1, session2); + given(session1.getSessionFactory()).willReturn(sf); + given(session1.getFlushMode()).willReturn(FlushMode.AUTO); + given(session2.beginTransaction()).willReturn(tx); + given(session2.connection()).willReturn(con); + given(session2.getFlushMode()).willReturn(FlushMode.AUTO); + given(session2.isOpen()).willReturn(true); + given(session2.isConnected()).willReturn(true); LocalSessionFactoryBean lsfb = new LocalSessionFactoryBean() { @Override @@ -936,46 +693,27 @@ public class HibernateTransactionManagerTests extends TestCase { }); assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); - sfControl.verify(); - session1Control.verify(); - session2Control.verify(); - txControl.verify(); + verify(session1, times(2)).flush(); + verify(session1).disconnect(); + verify(session1).close(); + verify(session2).flush(); + verify(session2).close(); + verify(tx).commit(); } + @Test public void testTransactionCommitWithEntityInterceptor() throws Exception { - MockControl interceptorControl = MockControl.createControl(org.hibernate.Interceptor.class); - Interceptor entityInterceptor = (Interceptor) interceptorControl.getMock(); - interceptorControl.replay(); - MockControl conControl = MockControl.createControl(Connection.class); - Connection con = (Connection) conControl.getMock(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - MockControl txControl = MockControl.createControl(Transaction.class); - Transaction tx = (Transaction) txControl.getMock(); + Interceptor entityInterceptor = mock(Interceptor.class); + Connection con = mock(Connection.class); + final SessionFactory sf = mock(SessionFactory.class); + Session session = mock(Session.class); + Transaction tx = mock(Transaction.class); - sf.openSession(entityInterceptor); - sfControl.setReturnValue(session, 1); - session.beginTransaction(); - sessionControl.setReturnValue(tx, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.close(); - sessionControl.setReturnValue(null, 1); - tx.commit(); - txControl.setVoidCallable(1); - session.isConnected(); - sessionControl.setReturnValue(true, 1); - session.connection(); - sessionControl.setReturnValue(con, 2); - con.isReadOnly(); - conControl.setReturnValue(false, 1); - - sfControl.replay(); - sessionControl.replay(); - txControl.replay(); - conControl.replay(); + given(sf.openSession(entityInterceptor)).willReturn(session); + given(session.beginTransaction()).willReturn(tx); + given(session.isOpen()).willReturn(true); + given(session.isConnected()).willReturn(true); + given(session.connection()).willReturn(con); HibernateTransactionManager tm = new HibernateTransactionManager(sf); tm.setEntityInterceptor(entityInterceptor); @@ -1003,61 +741,30 @@ public class HibernateTransactionManagerTests extends TestCase { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - interceptorControl.verify(); - sfControl.verify(); - sessionControl.verify(); - txControl.verify(); - conControl.verify(); + + verify(session).close(); + verify(tx).commit(); } + @Test public void testTransactionCommitWithEntityInterceptorBeanName() throws Exception { - MockControl interceptorControl = MockControl.createControl(org.hibernate.Interceptor.class); - Interceptor entityInterceptor = (Interceptor) interceptorControl.getMock(); - interceptorControl.replay(); - MockControl interceptor2Control = MockControl.createControl(org.hibernate.Interceptor.class); - Interceptor entityInterceptor2 = (Interceptor) interceptor2Control.getMock(); - interceptor2Control.replay(); + Interceptor entityInterceptor = mock(Interceptor.class); + Interceptor entityInterceptor2 = mock(Interceptor.class); + Connection con = mock(Connection.class); + final SessionFactory sf = mock(SessionFactory.class); + Session session = mock(Session.class); + Transaction tx = mock(Transaction.class); - MockControl conControl = MockControl.createControl(Connection.class); - Connection con = (Connection) conControl.getMock(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - MockControl txControl = MockControl.createControl(Transaction.class); - Transaction tx = (Transaction) txControl.getMock(); + given(sf.openSession(entityInterceptor)).willReturn(session); + given(sf.openSession(entityInterceptor2)).willReturn(session); + given(session.beginTransaction()).willReturn(tx); + given(session.isOpen()).willReturn(true); + given(session.isConnected()).willReturn(true); + given(session.connection()).willReturn(con); - sf.openSession(entityInterceptor); - sfControl.setReturnValue(session, 1); - sf.openSession(entityInterceptor2); - sfControl.setReturnValue(session, 1); - session.beginTransaction(); - sessionControl.setReturnValue(tx, 2); - session.isOpen(); - sessionControl.setReturnValue(true, 2); - session.close(); - sessionControl.setReturnValue(null, 2); - tx.commit(); - txControl.setVoidCallable(2); - session.isConnected(); - sessionControl.setReturnValue(true, 2); - session.connection(); - sessionControl.setReturnValue(con, 4); - con.isReadOnly(); - conControl.setReturnValue(false, 2); - - sfControl.replay(); - sessionControl.replay(); - txControl.replay(); - conControl.replay(); - - MockControl beanFactoryControl = MockControl.createControl(BeanFactory.class); - BeanFactory beanFactory = (BeanFactory) beanFactoryControl.getMock(); - beanFactory.getBean("entityInterceptor", Interceptor.class); - beanFactoryControl.setReturnValue(entityInterceptor, 1); - beanFactory.getBean("entityInterceptor", Interceptor.class); - beanFactoryControl.setReturnValue(entityInterceptor2, 1); - beanFactoryControl.replay(); + BeanFactory beanFactory = mock(BeanFactory.class); + given(beanFactory.getBean("entityInterceptor", Interceptor.class)).willReturn( + entityInterceptor, entityInterceptor2); HibernateTransactionManager tm = new HibernateTransactionManager(sf); tm.setEntityInterceptorBeanName("entityInterceptor"); @@ -1086,61 +793,29 @@ public class HibernateTransactionManagerTests extends TestCase { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - interceptorControl.verify(); - interceptor2Control.verify(); - sfControl.verify(); - sessionControl.verify(); - txControl.verify(); - conControl.verify(); - beanFactoryControl.verify(); + + verify(session, times(2)).close(); + verify(tx, times(2)).commit(); } + @Test public void testTransactionCommitWithReadOnly() throws Exception { - MockControl conControl = MockControl.createControl(Connection.class); - Connection con = (Connection) conControl.getMock(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - MockControl txControl = MockControl.createControl(Transaction.class); - Transaction tx = (Transaction) txControl.getMock(); - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); + Connection con = mock(Connection.class); + final SessionFactory sf = mock(SessionFactory.class); + Session session = mock(Session.class); + Transaction tx = mock(Transaction.class); + Query query = mock(Query.class); final List list = new ArrayList(); list.add("test"); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.beginTransaction(); - sessionControl.setReturnValue(tx, 1); - session.setFlushMode(FlushMode.MANUAL); - sessionControl.setVoidCallable(1); - session.connection(); - sessionControl.setReturnValue(con, 2); - con.setReadOnly(true); - conControl.setVoidCallable(1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.createQuery("some query string"); - sessionControl.setReturnValue(query, 1); - query.list(); - queryControl.setReturnValue(list, 1); - tx.commit(); - txControl.setVoidCallable(1); - session.isConnected(); - sessionControl.setReturnValue(true, 1); - con.isReadOnly(); - conControl.setReturnValue(true, 1); - con.setReadOnly(false); - conControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - - conControl.replay(); - sfControl.replay(); - sessionControl.replay(); - txControl.replay(); - queryControl.replay(); + given(sf.openSession()).willReturn(session); + given(session.beginTransaction()).willReturn(tx); + given(session.connection()).willReturn(con); + given(session.isOpen()).willReturn(true); + given(session.createQuery("some query string")).willReturn(query); + given(query.list()).willReturn(list); + given(session.isConnected()).willReturn(true); + given(con.isReadOnly()).willReturn(true); HibernateTransactionManager tm = new HibernateTransactionManager(sf); TransactionTemplate tt = new TransactionTemplate(tm); @@ -1163,65 +838,46 @@ public class HibernateTransactionManagerTests extends TestCase { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - conControl.verify(); - sfControl.verify(); - sessionControl.verify(); - txControl.verify(); - queryControl.verify(); + verify(session).setFlushMode(FlushMode.MANUAL); + verify(con).setReadOnly(true); + verify(tx).commit(); + verify(con).setReadOnly(false); + verify(session).close(); } + @Test public void testTransactionCommitWithFlushFailure() throws Exception { doTestTransactionCommitWithFlushFailure(false); } + @Test public void testTransactionCommitWithFlushFailureAndFallbackTranslation() throws Exception { doTestTransactionCommitWithFlushFailure(true); } private void doTestTransactionCommitWithFlushFailure(boolean fallbackTranslation) throws Exception { - MockControl conControl = MockControl.createControl(Connection.class); - Connection con = (Connection) conControl.getMock(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - MockControl txControl = MockControl.createControl(Transaction.class); - Transaction tx = (Transaction) txControl.getMock(); + Connection con = mock(Connection.class); + final SessionFactory sf = mock(SessionFactory.class); + Session session = mock(Session.class); + Transaction tx = mock(Transaction.class); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.beginTransaction(); - sessionControl.setReturnValue(tx, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - tx.commit(); + given(sf.openSession()).willReturn(session); + given(session.beginTransaction()).willReturn(tx); + given(session.isOpen()).willReturn(true); SQLException sqlEx = new SQLException("argh", "27"); Exception rootCause = null; if (fallbackTranslation) { GenericJDBCException jdbcEx = new GenericJDBCException("mymsg", sqlEx); - txControl.setThrowable(jdbcEx, 1); rootCause = sqlEx; + willThrow(jdbcEx).given(tx).commit(); } else { ConstraintViolationException jdbcEx = new ConstraintViolationException("mymsg", sqlEx, null); - txControl.setThrowable(jdbcEx, 1); rootCause = jdbcEx; + willThrow(jdbcEx).given(tx).commit(); } - session.close(); - sessionControl.setReturnValue(null, 1); - tx.rollback(); - txControl.setVoidCallable(1); - session.isConnected(); - sessionControl.setReturnValue(true, 1); - session.connection(); - sessionControl.setReturnValue(con, 2); - con.isReadOnly(); - conControl.setReturnValue(false, 1); - - sfControl.replay(); - sessionControl.replay(); - txControl.replay(); - conControl.replay(); + given(session.isConnected()).willReturn(true); + given(session.connection()).willReturn(con); HibernateTransactionManager tm = new HibernateTransactionManager(sf); TransactionTemplate tt = new TransactionTemplate(tm); @@ -1254,56 +910,25 @@ public class HibernateTransactionManagerTests extends TestCase { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - sfControl.verify(); - sessionControl.verify(); - txControl.verify(); - conControl.verify(); + + verify(session).close(); + verify(tx).rollback(); } + @Test public void testTransactionCommitWithPreBound() throws Exception { - MockControl dsControl = MockControl.createControl(DataSource.class); - final DataSource ds = (DataSource) dsControl.getMock(); - MockControl conControl = MockControl.createControl(Connection.class); - Connection con = (Connection) conControl.getMock(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); - MockControl txControl = MockControl.createControl(Transaction.class); - Transaction tx = (Transaction) txControl.getMock(); + final DataSource ds = mock(DataSource.class); + Connection con = mock(Connection.class); + final SessionFactory sf = mock(SessionFactory.class); + final Session session = mock(Session.class); + Transaction tx = mock(Transaction.class); - session.beginTransaction(); - sessionControl.setReturnValue(tx, 1); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.MANUAL, 1); - session.setFlushMode(FlushMode.AUTO); - sessionControl.setVoidCallable(1); - session.setFlushMode(FlushMode.MANUAL); - sessionControl.setVoidCallable(1); - session.connection(); - sessionControl.setReturnValue(con, 3); - con.getTransactionIsolation(); - conControl.setReturnValue(Connection.TRANSACTION_READ_COMMITTED); - con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); - conControl.setVoidCallable(1); - con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); - conControl.setVoidCallable(1); - tx.commit(); - txControl.setVoidCallable(1); - session.isConnected(); - sessionControl.setReturnValue(true, 1); - con.isReadOnly(); - conControl.setReturnValue(false, 1); - session.disconnect(); - sessionControl.setReturnValue(null, 1); - - dsControl.replay(); - conControl.replay(); - sfControl.replay(); - sessionControl.replay(); - txControl.replay(); + given(session.beginTransaction()).willReturn(tx); + given(session.isOpen()).willReturn(true); + given(session.getFlushMode()).willReturn(FlushMode.MANUAL); + given(session.connection()).willReturn(con); + given(con.getTransactionIsolation()).willReturn(Connection.TRANSACTION_READ_COMMITTED); + given(session.isConnected()).willReturn(true); HibernateTransactionManager tm = new HibernateTransactionManager(); tm.setSessionFactory(sf); @@ -1344,61 +969,29 @@ public class HibernateTransactionManagerTests extends TestCase { assertTrue("Hasn't thread connection", !TransactionSynchronizationManager.hasResource(ds)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - dsControl.verify(); - conControl.verify(); - sfControl.verify(); - sessionControl.verify(); - txControl.verify(); + InOrder ordered = inOrder(session, con); + ordered.verify(con).setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); + ordered.verify(session).setFlushMode(FlushMode.AUTO); + ordered.verify(con).setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); + ordered.verify(session).setFlushMode(FlushMode.MANUAL); + verify(tx).commit(); + verify(session).disconnect(); } + @Test public void testTransactionRollbackWithPreBound() throws Exception { - MockControl dsControl = MockControl.createControl(DataSource.class); - final DataSource ds = (DataSource) dsControl.getMock(); - MockControl conControl = MockControl.createControl(Connection.class); - Connection con = (Connection) conControl.getMock(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); - MockControl tx1Control = MockControl.createControl(Transaction.class); - final Transaction tx1 = (Transaction) tx1Control.getMock(); - MockControl tx2Control = MockControl.createControl(Transaction.class); - final Transaction tx2 = (Transaction) tx2Control.getMock(); + final DataSource ds = mock(DataSource.class); + Connection con = mock(Connection.class); + final SessionFactory sf = mock(SessionFactory.class); + final Session session = mock(Session.class); + final Transaction tx1 = mock(Transaction.class); + final Transaction tx2 = mock(Transaction.class); - session.beginTransaction(); - sessionControl.setReturnValue(tx1, 1); - tx1.rollback(); - tx1Control.setVoidCallable(1); - session.clear(); - sessionControl.setVoidCallable(1); - session.beginTransaction(); - sessionControl.setReturnValue(tx2, 1); - tx2.commit(); - tx2Control.setVoidCallable(1); - - session.isOpen(); - sessionControl.setReturnValue(true, 2); - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.MANUAL, 2); - session.setFlushMode(FlushMode.AUTO); - sessionControl.setVoidCallable(2); - session.setFlushMode(FlushMode.MANUAL); - sessionControl.setVoidCallable(2); - session.isConnected(); - sessionControl.setReturnValue(true, 2); - session.connection(); - sessionControl.setReturnValue(con, 6); - con.isReadOnly(); - conControl.setReturnValue(false, 2); - session.disconnect(); - sessionControl.setReturnValue(null, 2); - - dsControl.replay(); - conControl.replay(); - sfControl.replay(); - sessionControl.replay(); - tx1Control.replay(); - tx2Control.replay(); + given(session.beginTransaction()).willReturn(tx1, tx2); + given(session.isOpen()).willReturn(true); + given(session.getFlushMode()).willReturn(FlushMode.MANUAL); + given(session.isConnected()).willReturn(true); + given(session.connection()).willReturn(con); HibernateTransactionManager tm = new HibernateTransactionManager(); tm.setSessionFactory(sf); @@ -1470,56 +1063,27 @@ public class HibernateTransactionManagerTests extends TestCase { assertTrue("Hasn't thread connection", !TransactionSynchronizationManager.hasResource(ds)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - dsControl.verify(); - conControl.verify(); - sfControl.verify(); - sessionControl.verify(); - tx1Control.verify(); - tx2Control.verify(); + verify(tx1).rollback(); + verify(tx2).commit(); + InOrder ordered = inOrder(session); + ordered.verify(session).clear(); + ordered.verify(session).setFlushMode(FlushMode.AUTO); + ordered.verify(session).setFlushMode(FlushMode.MANUAL); + ordered.verify(session).disconnect(); } + @Test public void testTransactionRollbackWithHibernateManagedSession() throws Exception { - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); - MockControl tx1Control = MockControl.createControl(Transaction.class); - final Transaction tx1 = (Transaction) tx1Control.getMock(); - MockControl tx2Control = MockControl.createControl(Transaction.class); - final Transaction tx2 = (Transaction) tx2Control.getMock(); + final SessionFactory sf = mock(SessionFactory.class); + final Session session = mock(Session.class); + final Transaction tx1 = mock(Transaction.class); + final Transaction tx2 = mock(Transaction.class); - sf.getCurrentSession(); - sfControl.setReturnValue(session, 2); - session.isOpen(); - sessionControl.setReturnValue(true, 2); - session.getTransaction(); - sessionControl.setReturnValue(tx1, 1); - session.beginTransaction(); - sessionControl.setReturnValue(tx1, 1); - tx1.isActive(); - tx1Control.setReturnValue(false, 1); - tx1.rollback(); - tx1Control.setVoidCallable(1); - session.getTransaction(); - sessionControl.setReturnValue(tx2, 1); - session.beginTransaction(); - sessionControl.setReturnValue(tx2, 1); - tx2.isActive(); - tx2Control.setReturnValue(false, 1); - tx2.commit(); - tx2Control.setVoidCallable(1); - - session.getFlushMode(); - sessionControl.setReturnValue(FlushMode.MANUAL, 2); - session.setFlushMode(FlushMode.AUTO); - sessionControl.setVoidCallable(2); - session.setFlushMode(FlushMode.MANUAL); - sessionControl.setVoidCallable(2); - - sfControl.replay(); - sessionControl.replay(); - tx1Control.replay(); - tx2Control.replay(); + given(sf.getCurrentSession()).willReturn(session); + given(session.isOpen()).willReturn(true); + given(session.getTransaction()).willReturn(tx1, tx2); + given(session.beginTransaction()).willReturn(tx1, tx2); + given(session.getFlushMode()).willReturn(FlushMode.MANUAL); HibernateTransactionManager tm = new HibernateTransactionManager(); tm.setSessionFactory(sf); @@ -1577,16 +1141,19 @@ public class HibernateTransactionManagerTests extends TestCase { } }); - sfControl.verify(); - sessionControl.verify(); - tx1Control.verify(); - tx2Control.verify(); + verify(tx1).rollback(); + verify(tx2).commit(); + InOrder ordered = inOrder(session); + ordered.verify(session).setFlushMode(FlushMode.AUTO); + ordered.verify(session).setFlushMode(FlushMode.MANUAL); } + @Test public void testExistingTransactionWithPropagationNestedAndRollback() throws Exception { doTestExistingTransactionWithPropagationNestedAndRollback(false); } + @Test public void testExistingTransactionWithManualSavepointAndRollback() throws Exception { doTestExistingTransactionWithPropagationNestedAndRollback(true); } @@ -1594,62 +1161,27 @@ public class HibernateTransactionManagerTests extends TestCase { private void doTestExistingTransactionWithPropagationNestedAndRollback(final boolean manualSavepoint) throws Exception { - MockControl dsControl = MockControl.createControl(DataSource.class); - final DataSource ds = (DataSource) dsControl.getMock(); - MockControl conControl = MockControl.createControl(Connection.class); - Connection con = (Connection) conControl.getMock(); - MockControl mdControl = MockControl.createControl(DatabaseMetaData.class); - DatabaseMetaData md = (DatabaseMetaData) mdControl.getMock(); - MockControl spControl = MockControl.createControl(Savepoint.class); - Savepoint sp = (Savepoint) spControl.getMock(); - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - MockControl txControl = MockControl.createControl(Transaction.class); - Transaction tx = (Transaction) txControl.getMock(); - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); + final DataSource ds = mock(DataSource.class); + Connection con = mock(Connection.class); + DatabaseMetaData md = mock(DatabaseMetaData.class); + Savepoint sp = mock(Savepoint.class); + final SessionFactory sf = mock(SessionFactory.class); + Session session = mock(Session.class); + Transaction tx = mock(Transaction.class); + Query query = mock(Query.class); final List list = new ArrayList(); list.add("test"); - con.isReadOnly(); - conControl.setReturnValue(false, 1); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.beginTransaction(); - sessionControl.setReturnValue(tx, 1); - session.connection(); - sessionControl.setReturnValue(con, 3); - session.isOpen(); - sessionControl.setReturnValue(true, 1); - md.supportsSavepoints(); - mdControl.setReturnValue(true, 1); - con.getMetaData(); - conControl.setReturnValue(md, 1); - con.setSavepoint(ConnectionHolder.SAVEPOINT_NAME_PREFIX + 1); - conControl.setReturnValue(sp, 1); - con.rollback(sp); - conControl.setVoidCallable(1); - session.createQuery("some query string"); - sessionControl.setReturnValue(query, 1); - query.list(); - queryControl.setReturnValue(list, 1); - session.isConnected(); - sessionControl.setReturnValue(true, 1); - session.close(); - sessionControl.setReturnValue(null, 1); - tx.commit(); - txControl.setVoidCallable(1); - - dsControl.replay(); - conControl.replay(); - mdControl.replay(); - spControl.replay(); - sfControl.replay(); - sessionControl.replay(); - txControl.replay(); - queryControl.replay(); + given(sf.openSession()).willReturn(session); + given(session.beginTransaction()).willReturn(tx); + given(session.connection()).willReturn(con); + given(session.isOpen()).willReturn(true); + given(md.supportsSavepoints()).willReturn(true); + given(con.getMetaData()).willReturn(md); + given(con.setSavepoint(ConnectionHolder.SAVEPOINT_NAME_PREFIX + 1)).willReturn(sp); + given(session.createQuery("some query string")).willReturn(query); + given(query.list()).willReturn(list); + given(session.isConnected()).willReturn(true); HibernateTransactionManager tm = new HibernateTransactionManager(); tm.setJdbcExceptionTranslator(new SQLStateSQLExceptionTranslator()); @@ -1690,16 +1222,14 @@ public class HibernateTransactionManagerTests extends TestCase { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); assertTrue("Hasn't thread connection", !TransactionSynchronizationManager.hasResource(ds)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - dsControl.verify(); - conControl.verify(); - mdControl.verify(); - spControl.verify(); - sfControl.verify(); - sessionControl.verify(); - txControl.verify(); - queryControl.verify(); + + verify(con).setSavepoint(ConnectionHolder.SAVEPOINT_NAME_PREFIX + 1); + verify(con).rollback(sp); + verify(session).close(); + verify(tx).commit(); } + @Test public void testTransactionCommitWithNonExistingDatabase() throws Exception { final DriverManagerDataSource ds = new DriverManagerDataSource(); LocalSessionFactoryBean lsfb = new LocalSessionFactoryBean(); @@ -1742,6 +1272,7 @@ public class HibernateTransactionManagerTests extends TestCase { assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); } + @Test public void testTransactionCommitWithPreBoundSessionAndNonExistingDatabase() throws Exception { final DriverManagerDataSource ds = new DriverManagerDataSource(); LocalSessionFactoryBean lsfb = new LocalSessionFactoryBean(); @@ -1792,6 +1323,7 @@ public class HibernateTransactionManagerTests extends TestCase { assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); } + @Test public void testTransactionCommitWithNonExistingDatabaseAndLazyConnection() throws Exception { DriverManagerDataSource dsTarget = new DriverManagerDataSource(); final LazyConnectionDataSourceProxy ds = new LazyConnectionDataSourceProxy(); @@ -1835,28 +1367,14 @@ public class HibernateTransactionManagerTests extends TestCase { assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); } + @Test public void testTransactionFlush() throws Exception { - MockControl sfControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - final Session session = (Session) sessionControl.getMock(); - MockControl txControl = MockControl.createControl(Transaction.class); - Transaction tx = (Transaction) txControl.getMock(); + final SessionFactory sf = mock(SessionFactory.class); + final Session session = mock(Session.class); + Transaction tx = mock(Transaction.class); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.beginTransaction(); - sessionControl.setReturnValue(tx, 1); - session.flush(); - sessionControl.setVoidCallable(1); - tx.commit(); - txControl.setVoidCallable(1); - session.close(); - sessionControl.setReturnValue(null, 1); - - sfControl.replay(); - sessionControl.replay(); - txControl.replay(); + given(sf.openSession()).willReturn(session); + given(session.beginTransaction()).willReturn(tx); HibernateTransactionManager tm = new HibernateTransactionManager(sf); tm.setPrepareConnection(false); @@ -1876,17 +1394,9 @@ public class HibernateTransactionManagerTests extends TestCase { assertTrue("Hasn't thread session", !TransactionSynchronizationManager.hasResource(sf)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - sfControl.verify(); - sessionControl.verify(); - txControl.verify(); - } - @Override - protected void tearDown() { - assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); - assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); - assertFalse(TransactionSynchronizationManager.isCurrentTransactionReadOnly()); - assertFalse(TransactionSynchronizationManager.isActualTransactionActive()); + verify(session).flush(); + verify(tx).commit(); + verify(session).close(); } - } diff --git a/spring-orm/src/test/java/org/springframework/orm/hibernate3/LocalSessionFactoryBeanTests.java b/spring-orm/src/test/java/org/springframework/orm/hibernate3/LocalSessionFactoryBeanTests.java index 60d9b82d9b6..0b61d591603 100644 --- a/spring-orm/src/test/java/org/springframework/orm/hibernate3/LocalSessionFactoryBeanTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/hibernate3/LocalSessionFactoryBeanTests.java @@ -16,6 +16,13 @@ package org.springframework.orm.hibernate3; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -31,9 +38,6 @@ import java.util.Set; import javax.transaction.TransactionManager; -import junit.framework.TestCase; - -import org.easymock.MockControl; import org.hibernate.HibernateException; import org.hibernate.Interceptor; import org.hibernate.SessionFactory; @@ -51,6 +55,7 @@ import org.hibernate.engine.FilterDefinition; import org.hibernate.event.MergeEvent; import org.hibernate.event.MergeEventListener; import org.hibernate.mapping.TypeDef; +import org.junit.Test; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; import org.springframework.core.io.ClassPathResource; @@ -60,10 +65,12 @@ import org.springframework.jdbc.datasource.DriverManagerDataSource; /** * @author Juergen Hoeller + * @author Phillip Webb * @since 05.03.2005 */ -public class LocalSessionFactoryBeanTests extends TestCase { +public class LocalSessionFactoryBeanTests { + @Test @SuppressWarnings("serial") public void testLocalSessionFactoryBeanWithDataSource() throws Exception { final DriverManagerDataSource ds = new DriverManagerDataSource(); @@ -99,6 +106,7 @@ public class LocalSessionFactoryBeanTests extends TestCase { assertEquals("newSessionFactory", invocations.get(0)); } + @Test @SuppressWarnings("serial") public void testLocalSessionFactoryBeanWithCacheRegionFactory() throws Exception { final RegionFactory regionFactory = new NoCachingRegionFactory(null); @@ -134,6 +142,7 @@ public class LocalSessionFactoryBeanTests extends TestCase { assertEquals("newSessionFactory", invocations.get(0)); } + @Test @SuppressWarnings("serial") public void testLocalSessionFactoryBeanWithCacheProvider() throws Exception { final CacheProvider cacheProvider = new NoCacheProvider(); @@ -170,6 +179,7 @@ public class LocalSessionFactoryBeanTests extends TestCase { assertEquals("newSessionFactory", invocations.get(0)); } + @Test @SuppressWarnings("serial") public void testLocalSessionFactoryBeanWithTransactionAwareDataSource() throws Exception { final DriverManagerDataSource ds = new DriverManagerDataSource(); @@ -207,11 +217,11 @@ public class LocalSessionFactoryBeanTests extends TestCase { assertEquals("newSessionFactory", invocations.get(0)); } + @Test @SuppressWarnings("serial") public void testLocalSessionFactoryBeanWithDataSourceAndMappingResources() throws Exception { final DriverManagerDataSource ds = new DriverManagerDataSource(); - MockControl tmControl = MockControl.createControl(TransactionManager.class); - final TransactionManager tm = (TransactionManager) tmControl.getMock(); + final TransactionManager tm = mock(TransactionManager.class); final List invocations = new ArrayList(); LocalSessionFactoryBean sfb = new LocalSessionFactoryBean() { @Override @@ -254,6 +264,7 @@ public class LocalSessionFactoryBeanTests extends TestCase { assertEquals("newSessionFactory", invocations.get(2)); } + @Test @SuppressWarnings("serial") public void testLocalSessionFactoryBeanWithDataSourceAndMappingJarLocations() throws Exception { final DriverManagerDataSource ds = new DriverManagerDataSource(); @@ -289,6 +300,7 @@ public class LocalSessionFactoryBeanTests extends TestCase { assertTrue(invocations.contains("newSessionFactory")); } + @Test @SuppressWarnings("serial") public void testLocalSessionFactoryBeanWithDataSourceAndProperties() throws Exception { final DriverManagerDataSource ds = new DriverManagerDataSource(); @@ -333,6 +345,7 @@ public class LocalSessionFactoryBeanTests extends TestCase { assertTrue(invocations.contains("newSessionFactory")); } + @Test public void testLocalSessionFactoryBeanWithValidProperties() throws Exception { final Set invocations = new HashSet(); LocalSessionFactoryBean sfb = new LocalSessionFactoryBean() { @@ -354,6 +367,7 @@ public class LocalSessionFactoryBeanTests extends TestCase { assertTrue(invocations.contains("newSessionFactory")); } + @Test public void testLocalSessionFactoryBeanWithInvalidProperties() throws Exception { LocalSessionFactoryBean sfb = new LocalSessionFactoryBean(); sfb.setMappingResources(new String[0]); @@ -368,6 +382,7 @@ public class LocalSessionFactoryBeanTests extends TestCase { } } + @Test public void testLocalSessionFactoryBeanWithInvalidMappings() throws Exception { LocalSessionFactoryBean sfb = new LocalSessionFactoryBean(); sfb.setMappingResources(new String[]{"mapping.hbm.xml"}); @@ -379,12 +394,9 @@ public class LocalSessionFactoryBeanTests extends TestCase { } } + @Test public void testLocalSessionFactoryBeanWithCustomSessionFactory() throws Exception { - MockControl factoryControl = MockControl.createControl(SessionFactory.class); - final SessionFactory sessionFactory = (SessionFactory) factoryControl.getMock(); - sessionFactory.close(); - factoryControl.setVoidCallable(1); - factoryControl.replay(); + final SessionFactory sessionFactory = mock(SessionFactory.class); LocalSessionFactoryBean sfb = new LocalSessionFactoryBean() { @Override protected SessionFactory newSessionFactory(Configuration config) { @@ -397,9 +409,10 @@ public class LocalSessionFactoryBeanTests extends TestCase { sfb.afterPropertiesSet(); assertTrue(sessionFactory == sfb.getObject()); sfb.destroy(); - factoryControl.verify(); + verify(sessionFactory).close(); } + @Test @SuppressWarnings("serial") public void testLocalSessionFactoryBeanWithEntityInterceptor() throws Exception { LocalSessionFactoryBean sfb = new LocalSessionFactoryBean() { @@ -415,9 +428,7 @@ public class LocalSessionFactoryBeanTests extends TestCase { }; sfb.setMappingResources(new String[0]); sfb.setDataSource(new DriverManagerDataSource()); - MockControl interceptorControl = MockControl.createControl(Interceptor.class); - Interceptor entityInterceptor = (Interceptor) interceptorControl.getMock(); - interceptorControl.replay(); + Interceptor entityInterceptor = mock(Interceptor.class); sfb.setEntityInterceptor(entityInterceptor); try { sfb.afterPropertiesSet(); @@ -429,6 +440,7 @@ public class LocalSessionFactoryBeanTests extends TestCase { } } + @Test @SuppressWarnings("serial") public void testLocalSessionFactoryBeanWithNamingStrategy() throws Exception { LocalSessionFactoryBean sfb = new LocalSessionFactoryBean() { @@ -455,6 +467,7 @@ public class LocalSessionFactoryBeanTests extends TestCase { } } + @Test @SuppressWarnings("serial") public void testLocalSessionFactoryBeanWithCacheStrategies() throws Exception { final Properties registeredClassCache = new Properties(); @@ -495,6 +508,7 @@ public class LocalSessionFactoryBeanTests extends TestCase { assertEquals(collectionCache, registeredCollectionCache); } + @Test @SuppressWarnings("serial") public void testLocalSessionFactoryBeanWithCacheStrategiesAndRegions() throws Exception { final Properties registeredClassCache = new Properties(); @@ -534,6 +548,7 @@ public class LocalSessionFactoryBeanTests extends TestCase { assertEquals(collectionCache, registeredCollectionCache); } + @Test @SuppressWarnings("serial") public void testLocalSessionFactoryBeanWithEventListeners() throws Exception { final Map registeredListeners = new HashMap(); @@ -562,6 +577,7 @@ public class LocalSessionFactoryBeanTests extends TestCase { assertEquals(listeners, registeredListeners); } + @Test @SuppressWarnings("serial") public void testLocalSessionFactoryBeanWithEventListenerSet() throws Exception { final Map registeredListeners = new HashMap(); @@ -594,6 +610,7 @@ public class LocalSessionFactoryBeanTests extends TestCase { } /* + @Test public void testLocalSessionFactoryBeanWithFilterDefinitions() throws Exception { XmlBeanFactory xbf = new XmlBeanFactory(new ClassPathResource("filterDefinitions.xml", getClass())); FilterTestLocalSessionFactoryBean sf = (FilterTestLocalSessionFactoryBean) xbf.getBean("&sessionFactory"); @@ -613,6 +630,7 @@ public class LocalSessionFactoryBeanTests extends TestCase { } */ + @Test public void testLocalSessionFactoryBeanWithTypeDefinitions() throws Exception { DefaultListableBeanFactory xbf = new DefaultListableBeanFactory(); new XmlBeanDefinitionReader(xbf).loadBeanDefinitions(new ClassPathResource("typeDefinitions.xml", getClass())); diff --git a/spring-orm/src/test/java/org/springframework/orm/hibernate3/support/HibernateDaoSupportTests.java b/spring-orm/src/test/java/org/springframework/orm/hibernate3/support/HibernateDaoSupportTests.java index 2f264aa25f1..8aa465e0e82 100644 --- a/spring-orm/src/test/java/org/springframework/orm/hibernate3/support/HibernateDaoSupportTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/hibernate3/support/HibernateDaoSupportTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,25 +16,26 @@ package org.springframework.orm.hibernate3.support; +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; + import java.util.ArrayList; import java.util.List; -import junit.framework.TestCase; import org.hibernate.SessionFactory; -import org.easymock.MockControl; - +import org.junit.Test; import org.springframework.orm.hibernate3.HibernateTemplate; /** * @author Juergen Hoeller + * @author Phillip Webb * @since 05.03.2005 */ -public class HibernateDaoSupportTests extends TestCase { +public class HibernateDaoSupportTests { + @Test public void testHibernateDaoSupportWithSessionFactory() throws Exception { - MockControl sfControl = MockControl.createControl(SessionFactory.class); - SessionFactory sf = (SessionFactory) sfControl.getMock(); - sfControl.replay(); + SessionFactory sf = mock(SessionFactory.class); final List test = new ArrayList(); HibernateDaoSupport dao = new HibernateDaoSupport() { @Override @@ -47,9 +48,9 @@ public class HibernateDaoSupportTests extends TestCase { assertEquals("Correct SessionFactory", sf, dao.getSessionFactory()); assertEquals("Correct HibernateTemplate", sf, dao.getHibernateTemplate().getSessionFactory()); assertEquals("initDao called", test.size(), 1); - sfControl.verify(); } + @Test public void testHibernateDaoSupportWithHibernateTemplate() throws Exception { HibernateTemplate template = new HibernateTemplate(); final List test = new ArrayList(); diff --git a/spring-orm/src/test/java/org/springframework/orm/hibernate3/support/LobTypeTests.java b/spring-orm/src/test/java/org/springframework/orm/hibernate3/support/LobTypeTests.java index aefb017e989..ab82cbcf638 100644 --- a/spring-orm/src/test/java/org/springframework/orm/hibernate3/support/LobTypeTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/hibernate3/support/LobTypeTests.java @@ -16,6 +16,11 @@ package org.springframework.orm.hibernate3.support; +import static org.junit.Assert.*; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectOutputStream; @@ -31,12 +36,11 @@ import javax.transaction.Status; import javax.transaction.Synchronization; import javax.transaction.TransactionManager; -import junit.framework.TestCase; -import org.easymock.MockControl; -import org.easymock.internal.ArrayMatcher; import org.hibernate.SessionFactory; import org.hibernate.classic.Session; - +import org.junit.After; +import org.junit.Before; +import org.junit.Test; import org.springframework.jdbc.support.lob.LobCreator; import org.springframework.jdbc.support.lob.LobHandler; import org.springframework.orm.hibernate3.SessionFactoryUtils; @@ -46,39 +50,31 @@ import org.springframework.transaction.support.TransactionSynchronizationManager /** * @author Juergen Hoeller + * @author Phillip Webb * @since 05.03.2005 */ -public class LobTypeTests extends TestCase { +public class LobTypeTests { - private MockControl rsControl = MockControl.createControl(ResultSet.class); - private ResultSet rs = (ResultSet) rsControl.getMock(); - private MockControl psControl = MockControl.createControl(PreparedStatement.class); - private PreparedStatement ps = (PreparedStatement) psControl.getMock(); + private ResultSet rs = mock(ResultSet.class); + private PreparedStatement ps = mock(PreparedStatement.class); + private LobHandler lobHandler = mock(LobHandler.class); + private LobCreator lobCreator = mock(LobCreator.class); - private MockControl lobHandlerControl = MockControl.createControl(LobHandler.class); - private LobHandler lobHandler = (LobHandler) lobHandlerControl.getMock(); - private MockControl lobCreatorControl = MockControl.createControl(LobCreator.class); - private LobCreator lobCreator = (LobCreator) lobCreatorControl.getMock(); - - @Override - protected void setUp() throws SQLException { - lobHandler.getLobCreator(); - lobHandlerControl.setReturnValue(lobCreator); - lobCreator.close(); - lobCreatorControl.setVoidCallable(1); - - rsControl.replay(); - psControl.replay(); + @Before + public void setUp() throws SQLException { + given(lobHandler.getLobCreator()).willReturn(lobCreator); } - public void testClobStringType() throws Exception { - lobHandler.getClobAsString(rs, "column"); - lobHandlerControl.setReturnValue("content"); - lobCreator.setClobAsString(ps, 1, "content"); - lobCreatorControl.setVoidCallable(1); + @After + public void tearDown() { + assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); + assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); + verify(lobCreator).close(); + } - lobHandlerControl.replay(); - lobCreatorControl.replay(); + @Test + public void testClobStringType() throws Exception { + given(lobHandler.getClobAsString(rs, "column")).willReturn("content"); ClobStringType type = new ClobStringType(lobHandler, null); assertEquals(1, type.sqlTypes().length); @@ -101,29 +97,16 @@ public class LobTypeTests extends TestCase { finally { TransactionSynchronizationManager.clearSynchronization(); } + verify(lobCreator).setClobAsString(ps, 1, "content"); } + @Test public void testClobStringTypeWithSynchronizedSession() throws Exception { - MockControl sfControl = MockControl.createControl(SessionFactory.class); - SessionFactory sf = (SessionFactory) sfControl.getMock(); - MockControl sessionControl = MockControl.createControl(Session.class); - Session session = (Session) sessionControl.getMock(); - sf.openSession(); - sfControl.setReturnValue(session, 1); - session.getSessionFactory(); - sessionControl.setReturnValue(sf, 1); - session.close(); - sessionControl.setReturnValue(null, 1); - sfControl.replay(); - sessionControl.replay(); - - lobHandler.getClobAsString(rs, "column"); - lobHandlerControl.setReturnValue("content"); - lobCreator.setClobAsString(ps, 1, "content"); - lobCreatorControl.setVoidCallable(1); - - lobHandlerControl.replay(); - lobCreatorControl.replay(); + SessionFactory sf = mock(SessionFactory.class); + Session session = mock(Session.class); + given(sf.openSession()).willReturn(session); + given(session.getSessionFactory()).willReturn(sf); + given(lobHandler.getClobAsString(rs, "column")).willReturn("content"); ClobStringType type = new ClobStringType(lobHandler, null); assertEquals(1, type.sqlTypes().length); @@ -150,18 +133,13 @@ public class LobTypeTests extends TestCase { TransactionSynchronizationManager.clearSynchronization(); } - sfControl.verify(); - sessionControl.verify(); + verify(session).close(); + verify(lobCreator).setClobAsString(ps, 1, "content"); } + @Test public void testClobStringTypeWithFlushOnCommit() throws Exception { - lobHandler.getClobAsString(rs, "column"); - lobHandlerControl.setReturnValue("content"); - lobCreator.setClobAsString(ps, 1, "content"); - lobCreatorControl.setVoidCallable(1); - - lobHandlerControl.replay(); - lobCreatorControl.replay(); + given(lobHandler.getClobAsString(rs, "column")).willReturn("content"); ClobStringType type = new ClobStringType(lobHandler, null); assertEquals(1, type.sqlTypes().length); @@ -182,73 +160,51 @@ public class LobTypeTests extends TestCase { finally { TransactionSynchronizationManager.clearSynchronization(); } + verify(lobCreator).setClobAsString(ps, 1, "content"); } + @Test public void testClobStringTypeWithJtaSynchronization() throws Exception { - MockControl tmControl = MockControl.createControl(TransactionManager.class); - TransactionManager tm = (TransactionManager) tmControl.getMock(); + TransactionManager tm = mock(TransactionManager.class); MockJtaTransaction transaction = new MockJtaTransaction(); - tm.getStatus(); - tmControl.setReturnValue(Status.STATUS_ACTIVE, 1); - tm.getTransaction(); - tmControl.setReturnValue(transaction, 1); + given(tm.getStatus()).willReturn(Status.STATUS_ACTIVE); + given(tm.getTransaction()).willReturn(transaction); - lobHandler.getClobAsString(rs, "column"); - lobHandlerControl.setReturnValue("content"); - lobCreator.setClobAsString(ps, 1, "content"); - lobCreatorControl.setVoidCallable(1); - - lobHandlerControl.replay(); - lobCreatorControl.replay(); + given(lobHandler.getClobAsString(rs, "column")).willReturn("content"); ClobStringType type = new ClobStringType(lobHandler, tm); assertEquals("content", type.nullSafeGet(rs, new String[] {"column"}, null)); - tmControl.replay(); type.nullSafeSet(ps, "content", 1); Synchronization synch = transaction.getSynchronization(); assertNotNull(synch); synch.beforeCompletion(); synch.afterCompletion(Status.STATUS_COMMITTED); - tmControl.verify(); + verify(lobCreator).setClobAsString(ps, 1, "content"); } + @Test public void testClobStringTypeWithJtaSynchronizationAndRollback() throws Exception { - MockControl tmControl = MockControl.createControl(TransactionManager.class); - TransactionManager tm = (TransactionManager) tmControl.getMock(); + TransactionManager tm = mock(TransactionManager.class); MockJtaTransaction transaction = new MockJtaTransaction(); - tm.getStatus(); - tmControl.setReturnValue(Status.STATUS_ACTIVE, 1); - tm.getTransaction(); - tmControl.setReturnValue(transaction, 1); - - lobHandler.getClobAsString(rs, "column"); - lobHandlerControl.setReturnValue("content"); - lobCreator.setClobAsString(ps, 1, "content"); - lobCreatorControl.setVoidCallable(1); - - lobHandlerControl.replay(); - lobCreatorControl.replay(); + given(tm.getStatus()).willReturn(Status.STATUS_ACTIVE); + given(tm.getTransaction()).willReturn(transaction); + given(lobHandler.getClobAsString(rs, "column")).willReturn("content"); ClobStringType type = new ClobStringType(lobHandler, tm); assertEquals("content", type.nullSafeGet(rs, new String[] {"column"}, null)); - tmControl.replay(); type.nullSafeSet(ps, "content", 1); Synchronization synch = transaction.getSynchronization(); assertNotNull(synch); synch.afterCompletion(Status.STATUS_ROLLEDBACK); - tmControl.verify(); + + verify(lobCreator).setClobAsString(ps, 1, "content"); } + @Test public void testBlobStringType() throws Exception { String content = "content"; byte[] contentBytes = content.getBytes(); - lobHandler.getBlobAsBytes(rs, "column"); - lobHandlerControl.setReturnValue(contentBytes); - lobCreator.setBlobAsBytes(ps, 1, contentBytes); - lobCreatorControl.setMatcher(new ArrayMatcher()); - - lobHandlerControl.replay(); - lobCreatorControl.replay(); + given(lobHandler.getBlobAsBytes(rs, "column")).willReturn(contentBytes); BlobStringType type = new BlobStringType(lobHandler, null); assertEquals(1, type.sqlTypes().length); @@ -270,15 +226,12 @@ public class LobTypeTests extends TestCase { finally { TransactionSynchronizationManager.clearSynchronization(); } + verify(lobCreator).setBlobAsBytes(ps, 1, contentBytes); } + @Test public void testBlobStringTypeWithNull() throws Exception { - lobHandler.getBlobAsBytes(rs, "column"); - lobHandlerControl.setReturnValue(null); - lobCreator.setBlobAsBytes(ps, 1, null); - - lobHandlerControl.replay(); - lobCreatorControl.replay(); + given(lobHandler.getBlobAsBytes(rs, "column")).willReturn(null); BlobStringType type = new BlobStringType(lobHandler, null); assertEquals(null, type.nullSafeGet(rs, new String[] {"column"}, null)); @@ -292,76 +245,56 @@ public class LobTypeTests extends TestCase { finally { TransactionSynchronizationManager.clearSynchronization(); } + + verify(lobCreator).setBlobAsBytes(ps, 1, null); } + @Test public void testBlobStringTypeWithJtaSynchronization() throws Exception { - MockControl tmControl = MockControl.createControl(TransactionManager.class); - TransactionManager tm = (TransactionManager) tmControl.getMock(); + TransactionManager tm = mock(TransactionManager.class); MockJtaTransaction transaction = new MockJtaTransaction(); - tm.getStatus(); - tmControl.setReturnValue(Status.STATUS_ACTIVE, 1); - tm.getTransaction(); - tmControl.setReturnValue(transaction, 1); + given(tm.getStatus()).willReturn(Status.STATUS_ACTIVE); + given(tm.getTransaction()).willReturn(transaction); String content = "content"; byte[] contentBytes = content.getBytes(); - lobHandler.getBlobAsBytes(rs, "column"); - lobHandlerControl.setReturnValue(contentBytes); - lobCreator.setBlobAsBytes(ps, 1, contentBytes); - lobCreatorControl.setMatcher(new ArrayMatcher()); - - lobHandlerControl.replay(); - lobCreatorControl.replay(); + given(lobHandler.getBlobAsBytes(rs, "column")).willReturn(contentBytes); BlobStringType type = new BlobStringType(lobHandler, tm); assertEquals(content, type.nullSafeGet(rs, new String[] {"column"}, null)); - tmControl.replay(); type.nullSafeSet(ps, content, 1); Synchronization synch = transaction.getSynchronization(); assertNotNull(synch); synch.beforeCompletion(); synch.afterCompletion(Status.STATUS_COMMITTED); - tmControl.verify(); + + verify(lobCreator).setBlobAsBytes(ps, 1, contentBytes); } + @Test public void testBlobStringTypeWithJtaSynchronizationAndRollback() throws Exception { - MockControl tmControl = MockControl.createControl(TransactionManager.class); - TransactionManager tm = (TransactionManager) tmControl.getMock(); + TransactionManager tm = mock(TransactionManager.class); MockJtaTransaction transaction = new MockJtaTransaction(); - tm.getStatus(); - tmControl.setReturnValue(Status.STATUS_ACTIVE, 1); - tm.getTransaction(); - tmControl.setReturnValue(transaction, 1); + given(tm.getStatus()).willReturn(Status.STATUS_ACTIVE); + given(tm.getTransaction()).willReturn(transaction); String content = "content"; byte[] contentBytes = content.getBytes(); - lobHandler.getBlobAsBytes(rs, "column"); - lobHandlerControl.setReturnValue(contentBytes); - lobCreator.setBlobAsBytes(ps, 1, contentBytes); - lobCreatorControl.setMatcher(new ArrayMatcher()); - - lobHandlerControl.replay(); - lobCreatorControl.replay(); + given(lobHandler.getBlobAsBytes(rs, "column")).willReturn(contentBytes); BlobStringType type = new BlobStringType(lobHandler, tm); assertEquals(content, type.nullSafeGet(rs, new String[] {"column"}, null)); - tmControl.replay(); type.nullSafeSet(ps, content, 1); Synchronization synch = transaction.getSynchronization(); assertNotNull(synch); synch.afterCompletion(Status.STATUS_ROLLEDBACK); - tmControl.verify(); + verify(lobCreator).setBlobAsBytes(ps, 1, contentBytes); } + @Test public void testBlobByteArrayType() throws Exception { byte[] content = "content".getBytes(); - lobHandler.getBlobAsBytes(rs, "column"); - lobHandlerControl.setReturnValue(content); - lobCreator.setBlobAsBytes(ps, 1, content); - lobCreatorControl.setVoidCallable(1); - - lobHandlerControl.replay(); - lobCreatorControl.replay(); + given(lobHandler.getBlobAsBytes(rs, "column")).willReturn(content); BlobByteArrayType type = new BlobByteArrayType(lobHandler, null); assertEquals(1, type.sqlTypes().length); @@ -383,78 +316,56 @@ public class LobTypeTests extends TestCase { finally { TransactionSynchronizationManager.clearSynchronization(); } + verify(lobCreator).setBlobAsBytes(ps, 1, content); } + @Test public void testBlobByteArrayTypeWithJtaSynchronization() throws Exception { - MockControl tmControl = MockControl.createControl(TransactionManager.class); - TransactionManager tm = (TransactionManager) tmControl.getMock(); + TransactionManager tm = mock(TransactionManager.class); MockJtaTransaction transaction = new MockJtaTransaction(); - tm.getStatus(); - tmControl.setReturnValue(Status.STATUS_ACTIVE, 1); - tm.getTransaction(); - tmControl.setReturnValue(transaction, 1); + given(tm.getStatus()).willReturn(Status.STATUS_ACTIVE); + given(tm.getTransaction()).willReturn(transaction); byte[] content = "content".getBytes(); - lobHandler.getBlobAsBytes(rs, "column"); - lobHandlerControl.setReturnValue(content); - lobCreator.setBlobAsBytes(ps, 1, content); - lobCreatorControl.setVoidCallable(1); - - lobHandlerControl.replay(); - lobCreatorControl.replay(); + given(lobHandler.getBlobAsBytes(rs, "column")).willReturn(content); BlobByteArrayType type = new BlobByteArrayType(lobHandler, tm); assertEquals(content, type.nullSafeGet(rs, new String[] {"column"}, null)); - tmControl.replay(); type.nullSafeSet(ps, content, 1); Synchronization synch = transaction.getSynchronization(); assertNotNull(synch); synch.beforeCompletion(); synch.afterCompletion(Status.STATUS_COMMITTED); - tmControl.verify(); + verify(lobCreator).setBlobAsBytes(ps, 1, content); } + @Test public void testBlobByteArrayTypeWithJtaSynchronizationAndRollback() throws Exception { - MockControl tmControl = MockControl.createControl(TransactionManager.class); - TransactionManager tm = (TransactionManager) tmControl.getMock(); + TransactionManager tm = mock(TransactionManager.class); MockJtaTransaction transaction = new MockJtaTransaction(); - tm.getStatus(); - tmControl.setReturnValue(Status.STATUS_ACTIVE, 1); - tm.getTransaction(); - tmControl.setReturnValue(transaction, 1); + given(tm.getStatus()).willReturn(Status.STATUS_ACTIVE); + given(tm.getTransaction()).willReturn(transaction); byte[] content = "content".getBytes(); - lobHandler.getBlobAsBytes(rs, "column"); - lobHandlerControl.setReturnValue(content); - lobCreator.setBlobAsBytes(ps, 1, content); - lobCreatorControl.setVoidCallable(1); - - lobHandlerControl.replay(); - lobCreatorControl.replay(); + given(lobHandler.getBlobAsBytes(rs, "column")).willReturn(content); BlobByteArrayType type = new BlobByteArrayType(lobHandler, tm); assertEquals(content, type.nullSafeGet(rs, new String[] {"column"}, null)); - tmControl.replay(); type.nullSafeSet(ps, content, 1); Synchronization synch = transaction.getSynchronization(); assertNotNull(synch); synch.afterCompletion(Status.STATUS_ROLLEDBACK); - tmControl.verify(); + verify(lobCreator).setBlobAsBytes(ps, 1, content); } + @Test public void testBlobSerializableType() throws Exception { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject("content"); oos.close(); - lobHandler.getBlobAsBinaryStream(rs, "column"); - lobHandlerControl.setReturnValue(new ByteArrayInputStream(baos.toByteArray())); - lobCreator.setBlobAsBytes(ps, 1, baos.toByteArray()); - lobCreatorControl.setMatcher(new ArrayMatcher()); - - lobHandlerControl.replay(); - lobCreatorControl.replay(); + given(lobHandler.getBlobAsBinaryStream(rs, "column")).willReturn(new ByteArrayInputStream(baos.toByteArray())); BlobSerializableType type = new BlobSerializableType(lobHandler, null); assertEquals(1, type.sqlTypes().length); @@ -474,15 +385,12 @@ public class LobTypeTests extends TestCase { finally { TransactionSynchronizationManager.clearSynchronization(); } + verify(lobCreator).setBlobAsBytes(ps, 1, baos.toByteArray()); } + @Test public void testBlobSerializableTypeWithNull() throws Exception { - lobHandler.getBlobAsBinaryStream(rs, "column"); - lobHandlerControl.setReturnValue(null); - lobCreator.setBlobAsBytes(ps, 1, null); - - lobHandlerControl.replay(); - lobCreatorControl.replay(); + given(lobHandler.getBlobAsBinaryStream(rs, "column")).willReturn(null); BlobSerializableType type = new BlobSerializableType(lobHandler, null); assertEquals(null, type.nullSafeGet(rs, new String[] {"column"}, null)); @@ -496,29 +404,23 @@ public class LobTypeTests extends TestCase { finally { TransactionSynchronizationManager.clearSynchronization(); } + verify(lobCreator).setBlobAsBytes(ps, 1, null); } + @Test public void testBlobSerializableTypeWithJtaSynchronization() throws Exception { - MockControl tmControl = MockControl.createControl(TransactionManager.class); - TransactionManager tm = (TransactionManager) tmControl.getMock(); + TransactionManager tm = mock(TransactionManager.class); MockJtaTransaction transaction = new MockJtaTransaction(); - tm.getStatus(); - tmControl.setReturnValue(Status.STATUS_ACTIVE, 1); - tm.getTransaction(); - tmControl.setReturnValue(transaction, 1); + given(tm.getStatus()).willReturn(Status.STATUS_ACTIVE); + given(tm.getTransaction()).willReturn(transaction); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject("content"); oos.close(); - lobHandler.getBlobAsBinaryStream(rs, "column"); - lobHandlerControl.setReturnValue(new ByteArrayInputStream(baos.toByteArray())); - lobCreator.setBlobAsBytes(ps, 1, baos.toByteArray()); - lobCreatorControl.setMatcher(new ArrayMatcher()); - - lobHandlerControl.replay(); - lobCreatorControl.replay(); + given(lobHandler.getBlobAsBinaryStream(rs, "column")).willReturn( + new ByteArrayInputStream(baos.toByteArray())); BlobSerializableType type = new BlobSerializableType(lobHandler, tm); assertEquals(1, type.sqlTypes().length); @@ -527,36 +429,28 @@ public class LobTypeTests extends TestCase { assertTrue(type.isMutable()); assertEquals("content", type.nullSafeGet(rs, new String[] {"column"}, null)); - tmControl.replay(); type.nullSafeSet(ps, "content", 1); Synchronization synch = transaction.getSynchronization(); assertNotNull(synch); synch.beforeCompletion(); synch.afterCompletion(Status.STATUS_COMMITTED); - tmControl.verify(); + verify(lobCreator).setBlobAsBytes(ps, 1, baos.toByteArray()); } + @Test public void testBlobSerializableTypeWithJtaSynchronizationAndRollback() throws Exception { - MockControl tmControl = MockControl.createControl(TransactionManager.class); - TransactionManager tm = (TransactionManager) tmControl.getMock(); + TransactionManager tm = mock(TransactionManager.class); MockJtaTransaction transaction = new MockJtaTransaction(); - tm.getStatus(); - tmControl.setReturnValue(Status.STATUS_ACTIVE, 1); - tm.getTransaction(); - tmControl.setReturnValue(transaction, 1); + given(tm.getStatus()).willReturn(Status.STATUS_ACTIVE); + given(tm.getTransaction()).willReturn(transaction); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject("content"); oos.close(); - lobHandler.getBlobAsBinaryStream(rs, "column"); - lobHandlerControl.setReturnValue(new ByteArrayInputStream(baos.toByteArray())); - lobCreator.setBlobAsBytes(ps, 1, baos.toByteArray()); - lobCreatorControl.setMatcher(new ArrayMatcher()); - - lobHandlerControl.replay(); - lobCreatorControl.replay(); + given(lobHandler.getBlobAsBinaryStream(rs, "column")).willReturn( + new ByteArrayInputStream(baos.toByteArray())); BlobSerializableType type = new BlobSerializableType(lobHandler, tm); assertEquals(1, type.sqlTypes().length); @@ -565,20 +459,15 @@ public class LobTypeTests extends TestCase { assertTrue(type.isMutable()); assertEquals("content", type.nullSafeGet(rs, new String[] {"column"}, null)); - tmControl.replay(); type.nullSafeSet(ps, "content", 1); Synchronization synch = transaction.getSynchronization(); assertNotNull(synch); synch.afterCompletion(Status.STATUS_ROLLEDBACK); - tmControl.verify(); + verify(lobCreator).setBlobAsBytes(ps, 1, baos.toByteArray()); } + @Test public void testHbm2JavaStyleInitialization() throws Exception { - rsControl.reset(); - psControl.reset(); - lobHandlerControl.reset(); - lobCreatorControl.reset(); - ClobStringType cst = null; BlobByteArrayType bbat = null; BlobSerializableType bst = null; @@ -612,21 +501,6 @@ public class LobTypeTests extends TestCase { catch (IllegalStateException ex) { // expected } + lobCreator.close(); } - - @Override - protected void tearDown() { - try { - rsControl.verify(); - psControl.verify(); - lobHandlerControl.verify(); - lobCreatorControl.verify(); - } - catch (IllegalStateException ex) { - // ignore: test method didn't call replay - } - assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); - assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); - } - } diff --git a/spring-orm/src/test/java/org/springframework/orm/hibernate3/support/OpenSessionInViewTests.java b/spring-orm/src/test/java/org/springframework/orm/hibernate3/support/OpenSessionInViewTests.java index 41058bb7c4a..a51fc633e9b 100644 --- a/spring-orm/src/test/java/org/springframework/orm/hibernate3/support/OpenSessionInViewTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/hibernate3/support/OpenSessionInViewTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,11 +16,15 @@ package org.springframework.orm.hibernate3.support; -import static org.easymock.EasyMock.*; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import static org.mockito.BDDMockito.given; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; import java.io.IOException; import java.sql.Connection; @@ -33,9 +37,7 @@ import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.transaction.TransactionManager; -import org.easymock.EasyMock; import org.hibernate.FlushMode; -import org.hibernate.HibernateException; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.classic.Session; @@ -66,6 +68,7 @@ import org.springframework.web.context.support.StaticWebApplicationContext; /** * @author Juergen Hoeller * @author Rossen Stoyanchev + * @author Phillip Webb * @since 05.03.2005 */ public class OpenSessionInViewTests { @@ -90,19 +93,16 @@ public class OpenSessionInViewTests { @Test public void testOpenSessionInViewInterceptorWithSingleSession() throws Exception { - SessionFactory sf = createStrictMock(SessionFactory.class); - Session session = createStrictMock(Session.class); + SessionFactory sf = mock(SessionFactory.class); + Session session = mock(Session.class); OpenSessionInViewInterceptor interceptor = new OpenSessionInViewInterceptor(); interceptor.setSessionFactory(sf); - expect(sf.openSession()).andReturn(session); - expect(session.getSessionFactory()).andReturn(sf); - session.setFlushMode(FlushMode.MANUAL); - expect(session.getSessionFactory()).andReturn(sf); - expect(session.isOpen()).andReturn(true); - replay(sf); - replay(session); + given(sf.openSession()).willReturn(session); + given(session.getSessionFactory()).willReturn(sf); + given(session.getSessionFactory()).willReturn(sf); + given(session.isOpen()).willReturn(true); interceptor.preHandle(this.webRequest); assertTrue(TransactionSynchronizationManager.hasResource(sf)); @@ -122,29 +122,14 @@ public class OpenSessionInViewTests { interceptor.postHandle(this.webRequest, null); interceptor.afterCompletion(this.webRequest, null); - verify(sf); - verify(session); - reset(sf); - reset(session); - replay(sf); - replay(session); - interceptor.postHandle(this.webRequest, null); assertTrue(TransactionSynchronizationManager.hasResource(sf)); - verify(sf); - verify(session); - reset(sf); - reset(session); - expect(session.close()).andReturn(null); - replay(sf); - replay(session); - interceptor.afterCompletion(this.webRequest, null); assertFalse(TransactionSynchronizationManager.hasResource(sf)); - verify(sf); - verify(session); + verify(session).setFlushMode(FlushMode.MANUAL); + verify(session).close(); } @Test @@ -152,30 +137,19 @@ public class OpenSessionInViewTests { // Initial request thread - final SessionFactory sf = createStrictMock(SessionFactory.class); - Session session = createStrictMock(Session.class); + final SessionFactory sf = mock(SessionFactory.class); + Session session = mock(Session.class); OpenSessionInViewInterceptor interceptor = new OpenSessionInViewInterceptor(); interceptor.setSessionFactory(sf); - expect(sf.openSession()).andReturn(session); - expect(session.getSessionFactory()).andReturn(sf); - session.setFlushMode(FlushMode.MANUAL); - replay(sf); - replay(session); + given(sf.openSession()).willReturn(session); + given(session.getSessionFactory()).willReturn(sf); interceptor.preHandle(this.webRequest); assertTrue(TransactionSynchronizationManager.hasResource(sf)); - verify(sf); - verify(session); - - AsyncWebRequest asyncWebRequest = createStrictMock(AsyncWebRequest.class); - asyncWebRequest.addCompletionHandler((Runnable) anyObject()); - asyncWebRequest.addTimeoutHandler((Runnable) anyObject()); - asyncWebRequest.addCompletionHandler((Runnable) anyObject()); - asyncWebRequest.startAsync(); - replay(asyncWebRequest); + AsyncWebRequest asyncWebRequest = mock(AsyncWebRequest.class); WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(this.request); asyncManager.setTaskExecutor(new SyncTaskExecutor()); @@ -188,8 +162,6 @@ public class OpenSessionInViewTests { } }); - verify(asyncWebRequest); - interceptor.afterConcurrentHandlingStarted(this.webRequest); assertFalse(TransactionSynchronizationManager.hasResource(sf)); @@ -198,56 +170,34 @@ public class OpenSessionInViewTests { interceptor.preHandle(this.webRequest); assertTrue("Session not bound to async thread", TransactionSynchronizationManager.hasResource(sf)); - verify(sf); - reset(sf); - replay(sf); - - verify(session); - reset(session); - replay(session); - interceptor.postHandle(this.webRequest, null); assertTrue(TransactionSynchronizationManager.hasResource(sf)); - verify(sf); - reset(sf); - - verify(session); - reset(session); - - expect(session.close()).andReturn(null); - - replay(sf); - replay(session); - interceptor.afterCompletion(this.webRequest, null); assertFalse(TransactionSynchronizationManager.hasResource(sf)); - verify(sf); - verify(session); + verify(session).setFlushMode(FlushMode.MANUAL); + verify(asyncWebRequest, times(2)).addCompletionHandler(any(Runnable.class)); + verify(asyncWebRequest).addTimeoutHandler(any(Runnable.class)); + verify(asyncWebRequest).startAsync(); } @Test public void testOpenSessionInViewInterceptorWithSingleSessionAndJtaTm() throws Exception { - final SessionFactoryImplementor sf = createStrictMock(SessionFactoryImplementor.class); - Session session = createStrictMock(Session.class); + final SessionFactoryImplementor sf = mock(SessionFactoryImplementor.class); + Session session = mock(Session.class); - TransactionManager tm = createStrictMock(TransactionManager.class); - expect(tm.getTransaction()).andReturn(null); - expect(tm.getTransaction()).andReturn(null); - replay(tm); + TransactionManager tm = mock(TransactionManager.class); + given(tm.getTransaction()).willReturn(null); + given(tm.getTransaction()).willReturn(null); OpenSessionInViewInterceptor interceptor = new OpenSessionInViewInterceptor(); interceptor.setSessionFactory(sf); - expect(sf.openSession()).andReturn(session); - expect(sf.getTransactionManager()).andReturn(tm); - session.setFlushMode(FlushMode.MANUAL); - expect(sf.getTransactionManager()).andReturn(tm); - expect(session.isOpen()).andReturn(true); - - replay(sf); - replay(session); + given(sf.openSession()).willReturn(session); + given(sf.getTransactionManager()).willReturn(tm); + given(sf.getTransactionManager()).willReturn(tm); + given(session.isOpen()).willReturn(true); interceptor.preHandle(this.webRequest); assertTrue(TransactionSynchronizationManager.hasResource(sf)); @@ -268,86 +218,50 @@ public class OpenSessionInViewTests { interceptor.postHandle(this.webRequest, null); interceptor.afterCompletion(this.webRequest, null); - verify(sf); - verify(session); - - reset(sf); - reset(session); - replay(sf); - replay(session); - interceptor.postHandle(this.webRequest, null); assertTrue(TransactionSynchronizationManager.hasResource(sf)); - verify(sf); - verify(session); - - reset(sf); - reset(session); - expect(session.close()).andReturn(null); - replay(sf); - replay(session); - interceptor.afterCompletion(this.webRequest, null); assertFalse(TransactionSynchronizationManager.hasResource(sf)); - verify(sf); - verify(session); + verify(session).setFlushMode(FlushMode.MANUAL); + verify(session).close(); } @Test public void testOpenSessionInViewInterceptorWithSingleSessionAndFlush() throws Exception { - SessionFactory sf = createStrictMock(SessionFactory.class); - Session session = createStrictMock(Session.class); + SessionFactory sf = mock(SessionFactory.class); + Session session = mock(Session.class); OpenSessionInViewInterceptor interceptor = new OpenSessionInViewInterceptor(); interceptor.setSessionFactory(sf); interceptor.setFlushMode(HibernateAccessor.FLUSH_AUTO); - expect(sf.openSession()).andReturn(session); - expect(session.getSessionFactory()).andReturn(sf); - replay(sf); - replay(session); + given(sf.openSession()).willReturn(session); + given(session.getSessionFactory()).willReturn(sf); interceptor.preHandle(this.webRequest); assertTrue(TransactionSynchronizationManager.hasResource(sf)); - verify(sf); - verify(session); - reset(sf); - reset(session); - session.flush(); - replay(sf); - replay(session); interceptor.postHandle(this.webRequest, null); assertTrue(TransactionSynchronizationManager.hasResource(sf)); - verify(sf); - verify(session); - reset(sf); - reset(session); - expect(session.close()).andReturn(null); - replay(sf); - replay(session); interceptor.afterCompletion(this.webRequest, null); assertFalse(TransactionSynchronizationManager.hasResource(sf)); - verify(sf); - verify(session); + verify(session).flush(); + verify(session).close(); } @Test public void testOpenSessionInViewInterceptorAndDeferredClose() throws Exception { - SessionFactory sf = createStrictMock(SessionFactory.class); - Session session = createStrictMock(Session.class); + SessionFactory sf = mock(SessionFactory.class); + Session session = mock(Session.class); OpenSessionInViewInterceptor interceptor = new OpenSessionInViewInterceptor(); interceptor.setSessionFactory(sf); interceptor.setSingleSession(false); - expect(sf.openSession()).andReturn(session); - expect(session.getSessionFactory()).andReturn(sf); - session.setFlushMode(FlushMode.MANUAL); - replay(sf); - replay(session); + given(sf.openSession()).willReturn(session); + given(session.getSessionFactory()).willReturn(sf); interceptor.preHandle(this.webRequest); org.hibernate.Session sess = SessionFactoryUtils.getSession(sf, true); @@ -367,43 +281,28 @@ public class OpenSessionInViewTests { interceptor.postHandle(this.webRequest, null); interceptor.afterCompletion(this.webRequest, null); - verify(sf); - verify(session); - - reset(sf); - reset(session); - expect(session.close()).andReturn(null); - replay(sf); - replay(session); - interceptor.postHandle(this.webRequest, null); interceptor.afterCompletion(this.webRequest, null); - verify(sf); - verify(session); + verify(session).setFlushMode(FlushMode.MANUAL); + verify(session).close(); } @Test public void testOpenSessionInViewFilterWithSingleSession() throws Exception { - final SessionFactory sf = createStrictMock(SessionFactory.class); - Session session = createStrictMock(Session.class); + final SessionFactory sf = mock(SessionFactory.class); + Session session = mock(Session.class); - expect(sf.openSession()).andReturn(session); - expect(session.getSessionFactory()).andReturn(sf); - session.setFlushMode(FlushMode.MANUAL); - expect(session.close()).andReturn(null); - replay(sf); - replay(session); + given(sf.openSession()).willReturn(session); + given(session.getSessionFactory()).willReturn(sf); + given(session.close()).willReturn(null); - final SessionFactory sf2 = createStrictMock(SessionFactory.class); - Session session2 = createStrictMock(Session.class); + final SessionFactory sf2 = mock(SessionFactory.class); + Session session2 = mock(Session.class); - expect(sf2.openSession()).andReturn(session2); - expect(session2.getSessionFactory()).andReturn(sf2); - session2.setFlushMode(FlushMode.AUTO); - expect(session2.close()).andReturn(null); - replay(sf2); - replay(session2); + given(sf2.openSession()).willReturn(session2); + given(session2.getSessionFactory()).willReturn(sf2); + given(session2.close()).willReturn(null); StaticWebApplicationContext wac = new StaticWebApplicationContext(); wac.setServletContext(sc); @@ -448,26 +347,20 @@ public class OpenSessionInViewTests { assertFalse(TransactionSynchronizationManager.hasResource(sf2)); assertNotNull(this.request.getAttribute("invoked")); - verify(sf); - verify(session); - verify(sf2); - verify(session2); - + verify(session).setFlushMode(FlushMode.MANUAL); + verify(session2).setFlushMode(FlushMode.AUTO); wac.close(); } @Test public void testOpenSessionInViewFilterAsyncScenario() throws Exception { - final SessionFactory sf = createStrictMock(SessionFactory.class); - Session session = createStrictMock(Session.class); + final SessionFactory sf = mock(SessionFactory.class); + Session session = mock(Session.class); // Initial request during which concurrent handling starts.. - expect(sf.openSession()).andReturn(session); - expect(session.getSessionFactory()).andReturn(sf); - session.setFlushMode(FlushMode.MANUAL); - replay(sf); - replay(session); + given(sf.openSession()).willReturn(session); + given(session.getSessionFactory()).willReturn(sf); StaticWebApplicationContext wac = new StaticWebApplicationContext(); wac.setServletContext(sc); @@ -490,13 +383,8 @@ public class OpenSessionInViewTests { } }; - AsyncWebRequest asyncWebRequest = createMock(AsyncWebRequest.class); - asyncWebRequest.addCompletionHandler((Runnable) anyObject()); - asyncWebRequest.addTimeoutHandler(EasyMock.anyObject()); - asyncWebRequest.addCompletionHandler((Runnable) anyObject()); - asyncWebRequest.startAsync(); - expect(asyncWebRequest.isAsyncStarted()).andReturn(true).anyTimes(); - replay(asyncWebRequest); + AsyncWebRequest asyncWebRequest = mock(AsyncWebRequest.class); + given(asyncWebRequest.isAsyncStarted()).willReturn(true); WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(this.request); asyncManager.setTaskExecutor(new SyncTaskExecutor()); @@ -513,46 +401,29 @@ public class OpenSessionInViewTests { assertFalse(TransactionSynchronizationManager.hasResource(sf)); assertEquals(1, count.get()); - verify(sf); - verify(session); - verify(asyncWebRequest); - - reset(sf); - reset(session); - reset(asyncWebRequest); // Async dispatch after concurrent handling produces result ... - expect(session.close()).andReturn(null); - expect(asyncWebRequest.isAsyncStarted()).andReturn(false).anyTimes(); - - replay(sf); - replay(session); - replay(asyncWebRequest); - assertFalse(TransactionSynchronizationManager.hasResource(sf)); filter.doFilter(this.request, this.response, filterChain); assertFalse(TransactionSynchronizationManager.hasResource(sf)); assertEquals(2, count.get()); - verify(sf); - verify(session); - verify(asyncWebRequest); + verify(session).setFlushMode(FlushMode.MANUAL); + verify(asyncWebRequest, times(2)).addCompletionHandler(any(Runnable.class)); + verify(asyncWebRequest).addTimeoutHandler(any(Runnable.class)); + verify(asyncWebRequest).startAsync(); wac.close(); } @Test public void testOpenSessionInViewFilterWithSingleSessionAndPreBoundSession() throws Exception { - final SessionFactory sf = createStrictMock(SessionFactory.class); - Session session = createStrictMock(Session.class); + final SessionFactory sf = mock(SessionFactory.class); + Session session = mock(Session.class); - expect(sf.openSession()).andReturn(session); - expect(session.getSessionFactory()).andReturn(sf); - session.setFlushMode(FlushMode.MANUAL); - expect(session.close()).andReturn(null); - replay(sf); - replay(session); + given(sf.openSession()).willReturn(session); + given(session.getSessionFactory()).willReturn(sf); StaticWebApplicationContext wac = new StaticWebApplicationContext(); wac.setServletContext(sc); @@ -588,43 +459,32 @@ public class OpenSessionInViewTests { interceptor.postHandle(this.webRequest, null); interceptor.afterCompletion(this.webRequest, null); - verify(sf); - verify(session); + verify(session).setFlushMode(FlushMode.MANUAL); + verify(session).close(); wac.close(); } @Test public void testOpenSessionInViewFilterWithDeferredClose() throws Exception { - final SessionFactory sf = createStrictMock(SessionFactory.class); - final Session session = createStrictMock(Session.class); + final SessionFactory sf = mock(SessionFactory.class); + final Session session = mock(Session.class); - expect(sf.openSession()).andReturn(session); - expect(session.getSessionFactory()).andReturn(sf); - expect(session.getFlushMode()).andReturn(FlushMode.MANUAL); - session.setFlushMode(FlushMode.MANUAL); - replay(sf); - replay(session); + given(sf.openSession()).willReturn(session); + given(session.getSessionFactory()).willReturn(sf); + given(session.getFlushMode()).willReturn(FlushMode.MANUAL); - final SessionFactory sf2 = createStrictMock(SessionFactory.class); - final Session session2 = createStrictMock(Session.class); + final SessionFactory sf2 = mock(SessionFactory.class); + final Session session2 = mock(Session.class); - Transaction tx = createStrictMock(Transaction.class); - Connection con = createStrictMock(Connection.class); + Transaction tx = mock(Transaction.class); + Connection con = mock(Connection.class); - expect(sf2.openSession()).andReturn(session2); - expect(session2.connection()).andReturn(con); - expect(session2.beginTransaction()).andReturn(tx); - expect(session2.isConnected()).andReturn(true); - expect(session2.connection()).andReturn(con); - tx.commit(); - expect(con.isReadOnly()).andReturn(false); - session2.setFlushMode(FlushMode.MANUAL); - - replay(sf2); - replay(session2); - replay(tx); - replay(con); + given(sf2.openSession()).willReturn(session2); + given(session2.connection()).willReturn(con); + given(session2.beginTransaction()).willReturn(tx); + given(session2.isConnected()).willReturn(true); + given(session2.connection()).willReturn(con); StaticWebApplicationContext wac = new StaticWebApplicationContext(); wac.setServletContext(sc); @@ -653,13 +513,6 @@ public class OpenSessionInViewTests { org.hibernate.Session sess = SessionFactoryUtils.getSession(sf, true); SessionFactoryUtils.releaseSession(sess, sf); tm.commit(ts); - - verify(session); - reset(session); - - expect(session.close()).andReturn(null); - replay(session); - servletRequest.setAttribute("invoked", Boolean.TRUE); } }; @@ -668,17 +521,9 @@ public class OpenSessionInViewTests { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse) throws IOException, ServletException { - HibernateTransactionManager tm = new HibernateTransactionManager(sf2); TransactionStatus ts = tm.getTransaction(new DefaultTransactionDefinition()); tm.commit(ts); - - verify(session2); - reset(session2); - - expect(session2.close()).andReturn(null); - replay(session2); - filter.doFilter(servletRequest, servletResponse, filterChain); } }; @@ -688,39 +533,23 @@ public class OpenSessionInViewTests { filter2.doFilter(this.request, this.response, filterChain3); assertNotNull(this.request.getAttribute("invoked")); - verify(sf); - verify(session); - - verify(sf2); - verify(session2); - verify(tx); - verify(con); + verify(session).setFlushMode(FlushMode.MANUAL); + verify(tx).commit(); + verify(session2).setFlushMode(FlushMode.MANUAL); + verify(session).close(); + verify(session2).close(); wac.close(); } @Test public void testOpenSessionInViewFilterWithDeferredCloseAndAlreadyActiveDeferredClose() throws Exception { - final SessionFactory sf = createStrictMock(SessionFactory.class); - final Session session = createStrictMock(Session.class); + final SessionFactory sf = mock(SessionFactory.class); + final Session session = mock(Session.class); - expect(sf.openSession()).andReturn(session); - expect(session.getSessionFactory()).andReturn(sf); - expect(session.getFlushMode()).andReturn(FlushMode.MANUAL); - session.setFlushMode(FlushMode.MANUAL); - replay(sf); - replay(session); - -// sf.openSession(); -// sfControl.setReturnValue(session, 1); -// session.getSessionFactory(); -// sessionControl.setReturnValue(sf); -// session.getFlushMode(); -// sessionControl.setReturnValue(FlushMode.MANUAL, 1); -// session.setFlushMode(FlushMode.MANUAL); -// sessionControl.setVoidCallable(1); -// sfControl.replay(); -// sessionControl.replay(); + given(sf.openSession()).willReturn(session); + given(session.getSessionFactory()).willReturn(sf); + given(session.getFlushMode()).willReturn(FlushMode.MANUAL); StaticWebApplicationContext wac = new StaticWebApplicationContext(); wac.setServletContext(sc); @@ -754,16 +583,6 @@ public class OpenSessionInViewTests { org.hibernate.Session sess = SessionFactoryUtils.getSession(sf, true); SessionFactoryUtils.releaseSession(sess, sf); tm.commit(ts); - - verify(session); - reset(session); - try { - expect(session.close()).andReturn(null); - } - catch (HibernateException ex) { - } - replay(session); - servletRequest.setAttribute("invoked", Boolean.TRUE); } }; @@ -782,8 +601,8 @@ public class OpenSessionInViewTests { interceptor.postHandle(webRequest, null); interceptor.afterCompletion(webRequest, null); - verify(sf); - verify(session); + verify(session).setFlushMode(FlushMode.MANUAL); + verify(session).close(); wac.close(); } diff --git a/spring-orm/src/test/java/org/springframework/orm/ibatis/SqlMapClientTests.java b/spring-orm/src/test/java/org/springframework/orm/ibatis/SqlMapClientTests.java index 43a44e3498b..91a7277e783 100644 --- a/spring-orm/src/test/java/org/springframework/orm/ibatis/SqlMapClientTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/ibatis/SqlMapClientTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,13 @@ package org.springframework.orm.ibatis; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; @@ -25,24 +32,25 @@ import java.util.Map; import javax.sql.DataSource; -import com.ibatis.sqlmap.client.SqlMapClient; -import com.ibatis.sqlmap.client.SqlMapExecutor; -import com.ibatis.sqlmap.client.SqlMapSession; -import com.ibatis.sqlmap.client.event.RowHandler; -import junit.framework.TestCase; -import org.easymock.MockControl; - +import org.junit.Test; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.JdbcUpdateAffectedIncorrectNumberOfRowsException; import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport; +import com.ibatis.sqlmap.client.SqlMapClient; +import com.ibatis.sqlmap.client.SqlMapExecutor; +import com.ibatis.sqlmap.client.SqlMapSession; +import com.ibatis.sqlmap.client.event.RowHandler; + /** * @author Juergen Hoeller * @author Alef Arendsen + * @author Phillip Webb * @since 09.10.2004 */ -public class SqlMapClientTests extends TestCase { +public class SqlMapClientTests { + @Test public void testSqlMapClientFactoryBeanWithoutConfig() throws Exception { SqlMapClientFactoryBean factory = new SqlMapClientFactoryBean(); // explicitly set to null, don't know why ;-) @@ -56,32 +64,15 @@ public class SqlMapClientTests extends TestCase { } } + @Test public void testSqlMapClientTemplate() throws SQLException { - MockControl dsControl = MockControl.createControl(DataSource.class); - DataSource ds = (DataSource) dsControl.getMock(); - MockControl conControl = MockControl.createControl(Connection.class); - Connection con = (Connection) conControl.getMock(); - ds.getConnection(); - dsControl.setReturnValue(con, 1); - con.close(); - conControl.setVoidCallable(1); - dsControl.replay(); - conControl.replay(); + DataSource ds = mock(DataSource.class); + Connection con = mock(Connection.class); + final SqlMapSession session = mock(SqlMapSession.class); + SqlMapClient client = mock(SqlMapClient.class); - MockControl sessionControl = MockControl.createControl(SqlMapSession.class); - final SqlMapSession session = (SqlMapSession) sessionControl.getMock(); - MockControl clientControl = MockControl.createControl(SqlMapClient.class); - SqlMapClient client = (SqlMapClient) clientControl.getMock(); - client.openSession(); - clientControl.setReturnValue(session, 1); - session.getCurrentConnection(); - sessionControl.setReturnValue(null, 1); - session.setUserConnection(con); - sessionControl.setVoidCallable(1); - session.close(); - sessionControl.setVoidCallable(1); - sessionControl.replay(); - clientControl.replay(); + given(ds.getConnection()).willReturn(con); + given(client.openSession()).willReturn(session); SqlMapClientTemplate template = new SqlMapClientTemplate(); template.setDataSource(ds); @@ -95,30 +86,21 @@ public class SqlMapClientTests extends TestCase { } }); assertEquals("done", result); - dsControl.verify(); - conControl.verify(); - sessionControl.verify(); - clientControl.verify(); + + verify(con).close(); + verify(session).setUserConnection(con); + verify(session).close(); } + @Test public void testSqlMapClientTemplateWithNestedSqlMapSession() throws SQLException { - MockControl dsControl = MockControl.createControl(DataSource.class); - DataSource ds = (DataSource) dsControl.getMock(); - MockControl conControl = MockControl.createControl(Connection.class); - final Connection con = (Connection) conControl.getMock(); - dsControl.replay(); - conControl.replay(); + DataSource ds = mock(DataSource.class); + final Connection con = mock(Connection.class); + final SqlMapSession session = mock(SqlMapSession.class); + SqlMapClient client = mock(SqlMapClient.class); - MockControl sessionControl = MockControl.createControl(SqlMapSession.class); - final SqlMapSession session = (SqlMapSession) sessionControl.getMock(); - MockControl clientControl = MockControl.createControl(SqlMapClient.class); - SqlMapClient client = (SqlMapClient) clientControl.getMock(); - client.openSession(); - clientControl.setReturnValue(session, 1); - session.getCurrentConnection(); - sessionControl.setReturnValue(con, 1); - sessionControl.replay(); - clientControl.replay(); + given(client.openSession()).willReturn(session); + given(session.getCurrentConnection()).willReturn(con); SqlMapClientTemplate template = new SqlMapClientTemplate(); template.setDataSource(ds); @@ -132,210 +114,157 @@ public class SqlMapClientTests extends TestCase { } }); assertEquals("done", result); - dsControl.verify(); - conControl.verify(); - sessionControl.verify(); - clientControl.verify(); } + @Test public void testQueryForObjectOnSqlMapSession() throws SQLException { - MockControl dsControl = MockControl.createControl(DataSource.class); - DataSource ds = (DataSource) dsControl.getMock(); - MockControl conControl = MockControl.createControl(Connection.class); - Connection con = (Connection) conControl.getMock(); - MockControl clientControl = MockControl.createControl(SqlMapClient.class); - SqlMapClient client = (SqlMapClient) clientControl.getMock(); - MockControl sessionControl = MockControl.createControl(SqlMapSession.class); - SqlMapSession session = (SqlMapSession) sessionControl.getMock(); + DataSource ds = mock(DataSource.class); + Connection con = mock(Connection.class); + SqlMapClient client = mock(SqlMapClient.class); + SqlMapSession session = mock(SqlMapSession.class); - ds.getConnection(); - dsControl.setReturnValue(con, 1); - con.close(); - conControl.setVoidCallable(1); - client.getDataSource(); - clientControl.setReturnValue(ds, 2); - client.openSession(); - clientControl.setReturnValue(session, 1); - session.getCurrentConnection(); - sessionControl.setReturnValue(null, 1); - session.setUserConnection(con); - sessionControl.setVoidCallable(1); - session.queryForObject("myStatement", "myParameter"); - sessionControl.setReturnValue("myResult", 1); - session.close(); - sessionControl.setVoidCallable(1); - - dsControl.replay(); - conControl.replay(); - clientControl.replay(); - sessionControl.replay(); + given(ds.getConnection()).willReturn(con); + given(client.getDataSource()).willReturn(ds); + given(client.openSession()).willReturn(session); + given(session.queryForObject("myStatement", "myParameter")).willReturn("myResult"); SqlMapClientTemplate template = new SqlMapClientTemplate(); template.setSqlMapClient(client); template.afterPropertiesSet(); assertEquals("myResult", template.queryForObject("myStatement", "myParameter")); - dsControl.verify(); - clientControl.verify(); + verify(con).close(); + verify(session).setUserConnection(con); + verify(session).close(); } + @Test public void testQueryForObject() throws SQLException { TestSqlMapClientTemplate template = new TestSqlMapClientTemplate(); - template.executor.queryForObject("myStatement", null); - template.executorControl.setReturnValue("myResult", 1); - template.executorControl.replay(); + given(template.executor.queryForObject("myStatement", null)).willReturn("myResult"); assertEquals("myResult", template.queryForObject("myStatement")); - template.executorControl.verify(); } + @Test public void testQueryForObjectWithParameter() throws SQLException { TestSqlMapClientTemplate template = new TestSqlMapClientTemplate(); - template.executor.queryForObject("myStatement", "myParameter"); - template.executorControl.setReturnValue("myResult", 1); - template.executorControl.replay(); + given(template.executor.queryForObject("myStatement", "myParameter")).willReturn("myResult"); assertEquals("myResult", template.queryForObject("myStatement", "myParameter")); - template.executorControl.verify(); } + @Test public void testQueryForObjectWithParameterAndResultObject() throws SQLException { TestSqlMapClientTemplate template = new TestSqlMapClientTemplate(); - template.executor.queryForObject("myStatement", "myParameter", "myResult"); - template.executorControl.setReturnValue("myResult", 1); - template.executorControl.replay(); + given(template.executor.queryForObject("myStatement", "myParameter", + "myResult")).willReturn("myResult"); assertEquals("myResult", template.queryForObject("myStatement", "myParameter", "myResult")); - template.executorControl.verify(); } + @Test public void testQueryForList() throws SQLException { List result = new ArrayList(); TestSqlMapClientTemplate template = new TestSqlMapClientTemplate(); - template.executor.queryForList("myStatement", null); - template.executorControl.setReturnValue(result, 1); - template.executorControl.replay(); + given(template.executor.queryForList("myStatement", null)).willReturn(result); assertEquals(result, template.queryForList("myStatement")); - template.executorControl.verify(); } + @Test public void testQueryForListWithParameter() throws SQLException { List result = new ArrayList(); TestSqlMapClientTemplate template = new TestSqlMapClientTemplate(); - template.executor.queryForList("myStatement", "myParameter"); - template.executorControl.setReturnValue(result, 1); - template.executorControl.replay(); + given(template.executor.queryForList("myStatement", "myParameter")).willReturn(result); assertEquals(result, template.queryForList("myStatement", "myParameter")); - template.executorControl.verify(); } + @Test public void testQueryForListWithResultSize() throws SQLException { List result = new ArrayList(); TestSqlMapClientTemplate template = new TestSqlMapClientTemplate(); - template.executor.queryForList("myStatement", null, 10, 20); - template.executorControl.setReturnValue(result, 1); - template.executorControl.replay(); + given(template.executor.queryForList("myStatement", null, 10, 20)).willReturn(result); assertEquals(result, template.queryForList("myStatement", 10, 20)); - template.executorControl.verify(); } + @Test public void testQueryForListParameterAndWithResultSize() throws SQLException { List result = new ArrayList(); TestSqlMapClientTemplate template = new TestSqlMapClientTemplate(); - template.executor.queryForList("myStatement", "myParameter", 10, 20); - template.executorControl.setReturnValue(result, 1); - template.executorControl.replay(); + given(template.executor.queryForList("myStatement", "myParameter", 10, 20)).willReturn(result); assertEquals(result, template.queryForList("myStatement", "myParameter", 10, 20)); - template.executorControl.verify(); } + @Test public void testQueryWithRowHandler() throws SQLException { RowHandler rowHandler = new TestRowHandler(); TestSqlMapClientTemplate template = new TestSqlMapClientTemplate(); - template.executor.queryWithRowHandler("myStatement", null, rowHandler); - template.executorControl.setVoidCallable(1); - template.executorControl.replay(); template.queryWithRowHandler("myStatement", rowHandler); - template.executorControl.verify(); + verify(template.executor).queryWithRowHandler("myStatement", null, rowHandler); } + @Test public void testQueryWithRowHandlerWithParameter() throws SQLException { RowHandler rowHandler = new TestRowHandler(); TestSqlMapClientTemplate template = new TestSqlMapClientTemplate(); - template.executor.queryWithRowHandler("myStatement", "myParameter", rowHandler); - template.executorControl.setVoidCallable(1); - template.executorControl.replay(); template.queryWithRowHandler("myStatement", "myParameter", rowHandler); - template.executorControl.verify(); + verify(template.executor).queryWithRowHandler("myStatement", "myParameter", rowHandler); } + @Test public void testQueryForMap() throws SQLException { Map result = new HashMap(); TestSqlMapClientTemplate template = new TestSqlMapClientTemplate(); - template.executor.queryForMap("myStatement", "myParameter", "myKey"); - template.executorControl.setReturnValue(result, 1); - template.executorControl.replay(); + given(template.executor.queryForMap("myStatement", "myParameter", "myKey")).willReturn(result); assertEquals(result, template.queryForMap("myStatement", "myParameter", "myKey")); - template.executorControl.verify(); } + @Test public void testQueryForMapWithValueProperty() throws SQLException { Map result = new HashMap(); TestSqlMapClientTemplate template = new TestSqlMapClientTemplate(); - template.executor.queryForMap("myStatement", "myParameter", "myKey", "myValue"); - template.executorControl.setReturnValue(result, 1); - template.executorControl.replay(); + given(template.executor.queryForMap("myStatement", "myParameter", "myKey", + "myValue")).willReturn(result); assertEquals(result, template.queryForMap("myStatement", "myParameter", "myKey", "myValue")); - template.executorControl.verify(); } + @Test public void testInsert() throws SQLException { TestSqlMapClientTemplate template = new TestSqlMapClientTemplate(); - template.executor.insert("myStatement", null); - template.executorControl.setReturnValue("myResult", 1); - template.executorControl.replay(); + given(template.executor.insert("myStatement", null)).willReturn("myResult"); assertEquals("myResult", template.insert("myStatement")); - template.executorControl.verify(); } + @Test public void testInsertWithParameter() throws SQLException { TestSqlMapClientTemplate template = new TestSqlMapClientTemplate(); - template.executor.insert("myStatement", "myParameter"); - template.executorControl.setReturnValue("myResult", 1); - template.executorControl.replay(); + given(template.executor.insert("myStatement", "myParameter")).willReturn("myResult"); assertEquals("myResult", template.insert("myStatement", "myParameter")); - template.executorControl.verify(); } + @Test public void testUpdate() throws SQLException { TestSqlMapClientTemplate template = new TestSqlMapClientTemplate(); - template.executor.update("myStatement", null); - template.executorControl.setReturnValue(10, 1); - template.executorControl.replay(); + given(template.executor.update("myStatement", null)).willReturn(10); assertEquals(10, template.update("myStatement")); - template.executorControl.verify(); } + @Test public void testUpdateWithParameter() throws SQLException { TestSqlMapClientTemplate template = new TestSqlMapClientTemplate(); - template.executor.update("myStatement", "myParameter"); - template.executorControl.setReturnValue(10, 1); - template.executorControl.replay(); + given(template.executor.update("myStatement", "myParameter")).willReturn(10); assertEquals(10, template.update("myStatement", "myParameter")); - template.executorControl.verify(); } + @Test public void testUpdateWithRequiredRowsAffected() throws SQLException { TestSqlMapClientTemplate template = new TestSqlMapClientTemplate(); - template.executor.update("myStatement", "myParameter"); - template.executorControl.setReturnValue(10, 1); - template.executorControl.replay(); + given(template.executor.update("myStatement", "myParameter")).willReturn(10); template.update("myStatement", "myParameter", 10); - template.executorControl.verify(); + verify(template.executor).update("myStatement", "myParameter"); } + @Test public void testUpdateWithRequiredRowsAffectedAndInvalidRowCount() throws SQLException { TestSqlMapClientTemplate template = new TestSqlMapClientTemplate(); - template.executor.update("myStatement", "myParameter"); - template.executorControl.setReturnValue(20, 1); - template.executorControl.replay(); + given(template.executor.update("myStatement", "myParameter")).willReturn(20); try { template.update("myStatement", "myParameter", 10); fail("Should have thrown JdbcUpdateAffectedIncorrectNumberOfRowsException"); @@ -345,41 +274,34 @@ public class SqlMapClientTests extends TestCase { assertEquals(10, ex.getExpectedRowsAffected()); assertEquals(20, ex.getActualRowsAffected()); } - template.executorControl.verify(); } + @Test public void testDelete() throws SQLException { TestSqlMapClientTemplate template = new TestSqlMapClientTemplate(); - template.executor.delete("myStatement", null); - template.executorControl.setReturnValue(10, 1); - template.executorControl.replay(); + given(template.executor.delete("myStatement", null)).willReturn(10); assertEquals(10, template.delete("myStatement")); - template.executorControl.verify(); } + @Test public void testDeleteWithParameter() throws SQLException { TestSqlMapClientTemplate template = new TestSqlMapClientTemplate(); - template.executor.delete("myStatement", "myParameter"); - template.executorControl.setReturnValue(10, 1); - template.executorControl.replay(); + given(template.executor.delete("myStatement", "myParameter")).willReturn(10); assertEquals(10, template.delete("myStatement", "myParameter")); - template.executorControl.verify(); } + @Test public void testDeleteWithRequiredRowsAffected() throws SQLException { TestSqlMapClientTemplate template = new TestSqlMapClientTemplate(); - template.executor.delete("myStatement", "myParameter"); - template.executorControl.setReturnValue(10, 1); - template.executorControl.replay(); + given(template.executor.delete("myStatement", "myParameter")).willReturn(10); template.delete("myStatement", "myParameter", 10); - template.executorControl.verify(); + verify(template.executor).delete("myStatement", "myParameter"); } + @Test public void testDeleteWithRequiredRowsAffectedAndInvalidRowCount() throws SQLException { TestSqlMapClientTemplate template = new TestSqlMapClientTemplate(); - template.executor.delete("myStatement", "myParameter"); - template.executorControl.setReturnValue(20, 1); - template.executorControl.replay(); + given(template.executor.delete("myStatement", "myParameter")).willReturn(20); try { template.delete("myStatement", "myParameter", 10); fail("Should have thrown JdbcUpdateAffectedIncorrectNumberOfRowsException"); @@ -389,20 +311,17 @@ public class SqlMapClientTests extends TestCase { assertEquals(10, ex.getExpectedRowsAffected()); assertEquals(20, ex.getActualRowsAffected()); } - template.executorControl.verify(); } + @Test public void testSqlMapClientDaoSupport() throws Exception { - MockControl dsControl = MockControl.createControl(DataSource.class); - DataSource ds = (DataSource) dsControl.getMock(); + DataSource ds = mock(DataSource.class); SqlMapClientDaoSupport testDao = new SqlMapClientDaoSupport() { }; testDao.setDataSource(ds); assertEquals(ds, testDao.getDataSource()); - MockControl clientControl = MockControl.createControl(SqlMapClient.class); - SqlMapClient client = (SqlMapClient) clientControl.getMock(); - clientControl.replay(); + SqlMapClient client = mock(SqlMapClient.class); testDao.setSqlMapClient(client); assertEquals(client, testDao.getSqlMapClient()); @@ -419,8 +338,7 @@ public class SqlMapClientTests extends TestCase { private static class TestSqlMapClientTemplate extends SqlMapClientTemplate { - public MockControl executorControl = MockControl.createControl(SqlMapExecutor.class); - public SqlMapExecutor executor = (SqlMapExecutor) executorControl.getMock(); + public SqlMapExecutor executor = mock(SqlMapExecutor.class); @Override public Object execute(SqlMapClientCallback action) throws DataAccessException { diff --git a/spring-orm/src/test/java/org/springframework/orm/ibatis/support/LobTypeHandlerTests.java b/spring-orm/src/test/java/org/springframework/orm/ibatis/support/LobTypeHandlerTests.java index d92b60d3f4a..948c4e7ec26 100644 --- a/spring-orm/src/test/java/org/springframework/orm/ibatis/support/LobTypeHandlerTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/ibatis/support/LobTypeHandlerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,21 +16,29 @@ package org.springframework.orm.ibatis.support; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.InputStream; import java.io.ObjectOutputStream; import java.sql.PreparedStatement; import java.sql.ResultSet; -import java.sql.SQLException; import java.util.Arrays; import java.util.List; import javax.sql.DataSource; -import junit.framework.TestCase; -import org.easymock.ArgumentsMatcher; -import org.easymock.MockControl; - +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; import org.springframework.jdbc.datasource.DataSourceUtils; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy; @@ -41,42 +49,33 @@ import org.springframework.transaction.support.TransactionSynchronizationManager /** * @author Juergen Hoeller + * @author Phillip Webb * @since 27.02.2005 */ -public class LobTypeHandlerTests extends TestCase { +public class LobTypeHandlerTests { - private MockControl rsControl = MockControl.createControl(ResultSet.class); - private ResultSet rs = (ResultSet) rsControl.getMock(); - private MockControl psControl = MockControl.createControl(PreparedStatement.class); - private PreparedStatement ps = (PreparedStatement) psControl.getMock(); + private ResultSet rs = mock(ResultSet.class); + private PreparedStatement ps = mock(PreparedStatement.class); - private MockControl lobHandlerControl = MockControl.createControl(LobHandler.class); - private LobHandler lobHandler = (LobHandler) lobHandlerControl.getMock(); - private MockControl lobCreatorControl = MockControl.createControl(LobCreator.class); - private LobCreator lobCreator = (LobCreator) lobCreatorControl.getMock(); + private LobHandler lobHandler = mock(LobHandler.class); + private LobCreator lobCreator = mock(LobCreator.class); - @Override - protected void setUp() throws SQLException { - rs.findColumn("column"); - rsControl.setReturnValue(1); - - lobHandler.getLobCreator(); - lobHandlerControl.setReturnValue(lobCreator); - lobCreator.close(); - lobCreatorControl.setVoidCallable(1); - - rsControl.replay(); - psControl.replay(); + @Before + public void setUp() throws Exception { + given(rs.findColumn("column")).willReturn(1); + given(lobHandler.getLobCreator()).willReturn(lobCreator); } - public void testClobStringTypeHandler() throws Exception { - lobHandler.getClobAsString(rs, 1); - lobHandlerControl.setReturnValue("content", 2); - lobCreator.setClobAsString(ps, 1, "content"); - lobCreatorControl.setVoidCallable(1); + @After + public void tearDown() throws Exception { + verify(lobCreator).close(); + assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); + assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); + } - lobHandlerControl.replay(); - lobCreatorControl.replay(); + @Test + public void testClobStringTypeHandler() throws Exception { + given(lobHandler.getClobAsString(rs, 1)).willReturn("content"); ClobStringTypeHandler type = new ClobStringTypeHandler(lobHandler); assertEquals("content", type.valueOf("content")); @@ -95,19 +94,15 @@ public class LobTypeHandlerTests extends TestCase { finally { TransactionSynchronizationManager.clearSynchronization(); } + verify(lobCreator).setClobAsString(ps, 1, "content"); } + @Test public void testClobStringTypeWithSynchronizedConnection() throws Exception { DataSource dsTarget = new DriverManagerDataSource(); DataSource ds = new LazyConnectionDataSourceProxy(dsTarget); - lobHandler.getClobAsString(rs, 1); - lobHandlerControl.setReturnValue("content", 2); - lobCreator.setClobAsString(ps, 1, "content"); - lobCreatorControl.setVoidCallable(1); - - lobHandlerControl.replay(); - lobCreatorControl.replay(); + given(lobHandler.getClobAsString(rs, 1)).willReturn("content"); ClobStringTypeHandler type = new ClobStringTypeHandler(lobHandler); assertEquals("content", type.valueOf("content")); @@ -129,17 +124,13 @@ public class LobTypeHandlerTests extends TestCase { finally { TransactionSynchronizationManager.clearSynchronization(); } + verify(lobCreator).setClobAsString(ps, 1, "content"); } + @Test public void testBlobByteArrayType() throws Exception { byte[] content = "content".getBytes(); - lobHandler.getBlobAsBytes(rs, 1); - lobHandlerControl.setReturnValue(content, 2); - lobCreator.setBlobAsBytes(ps, 1, content); - lobCreatorControl.setVoidCallable(1); - - lobHandlerControl.replay(); - lobCreatorControl.replay(); + given(lobHandler.getBlobAsBytes(rs, 1)).willReturn(content); BlobByteArrayTypeHandler type = new BlobByteArrayTypeHandler(lobHandler); assertTrue(Arrays.equals(content, (byte[]) type.valueOf("content"))); @@ -157,33 +148,24 @@ public class LobTypeHandlerTests extends TestCase { finally { TransactionSynchronizationManager.clearSynchronization(); } + verify(lobCreator).setBlobAsBytes(ps, 1, content); } + @Test public void testBlobSerializableType() throws Exception { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject("content"); oos.close(); - lobHandler.getBlobAsBinaryStream(rs, 1); - lobHandlerControl.setReturnValue(new ByteArrayInputStream(baos.toByteArray()), 1); - lobHandler.getBlobAsBinaryStream(rs, 1); - lobHandlerControl.setReturnValue(new ByteArrayInputStream(baos.toByteArray()), 1); - lobCreator.setBlobAsBytes(ps, 1, baos.toByteArray()); - lobCreatorControl.setMatcher(new ArgumentsMatcher() { + given(lobHandler.getBlobAsBinaryStream(rs, 1)).willAnswer(new Answer() { @Override - public boolean matches(Object[] o1, Object[] o2) { - return Arrays.equals((byte[]) o1[2], (byte[]) o2[2]); - } - @Override - public String toString(Object[] objects) { - return null; + public InputStream answer(InvocationOnMock invocation) + throws Throwable { + return new ByteArrayInputStream(baos.toByteArray()); } }); - lobHandlerControl.replay(); - lobCreatorControl.replay(); - BlobSerializableTypeHandler type = new BlobSerializableTypeHandler(lobHandler); assertEquals("content", type.valueOf("content")); assertEquals("content", type.getResult(rs, "column")); @@ -200,15 +182,12 @@ public class LobTypeHandlerTests extends TestCase { finally { TransactionSynchronizationManager.clearSynchronization(); } + verify(lobCreator).setBlobAsBytes(ps, 1, baos.toByteArray()); } + @Test public void testBlobSerializableTypeWithNull() throws Exception { - lobHandler.getBlobAsBinaryStream(rs, 1); - lobHandlerControl.setReturnValue(null, 2); - lobCreator.setBlobAsBytes(ps, 1, null); - - lobHandlerControl.replay(); - lobCreatorControl.replay(); + given(lobHandler.getBlobAsBinaryStream(rs, 1)).willReturn(null); BlobSerializableTypeHandler type = new BlobSerializableTypeHandler(lobHandler); assertEquals(null, type.valueOf(null)); @@ -225,21 +204,6 @@ public class LobTypeHandlerTests extends TestCase { finally { TransactionSynchronizationManager.clearSynchronization(); } + verify(lobCreator).setBlobAsBytes(ps, 1, null); } - - @Override - protected void tearDown() { - try { - rsControl.verify(); - psControl.verify(); - lobHandlerControl.verify(); - lobCreatorControl.verify(); - } - catch (IllegalStateException ex) { - // ignore: test method didn't call replay - } - assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); - assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); - } - } diff --git a/spring-orm/src/test/java/org/springframework/orm/jdo/JdoInterceptorTests.java b/spring-orm/src/test/java/org/springframework/orm/jdo/JdoInterceptorTests.java index 21fa381178b..c88e58cd07d 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jdo/JdoInterceptorTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jdo/JdoInterceptorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,36 +16,34 @@ package org.springframework.orm.jdo; +import static org.junit.Assert.fail; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + import java.lang.reflect.AccessibleObject; import java.lang.reflect.Method; import javax.jdo.PersistenceManager; import javax.jdo.PersistenceManagerFactory; -import junit.framework.TestCase; - import org.aopalliance.intercept.Interceptor; import org.aopalliance.intercept.Invocation; import org.aopalliance.intercept.MethodInvocation; -import org.easymock.MockControl; +import org.junit.Test; import org.springframework.transaction.support.TransactionSynchronizationManager; /** * @author Juergen Hoeller + * @author Phillip Webb */ -public class JdoInterceptorTests extends TestCase { +public class JdoInterceptorTests { + @Test public void testInterceptor() { - MockControl pmfControl = MockControl.createControl(PersistenceManagerFactory.class); - PersistenceManagerFactory pmf = (PersistenceManagerFactory) pmfControl.getMock(); - MockControl pmControl = MockControl.createControl(PersistenceManager.class); - PersistenceManager pm = (PersistenceManager) pmControl.getMock(); - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); + PersistenceManagerFactory pmf = mock(PersistenceManagerFactory.class); + PersistenceManager pm = mock(PersistenceManager.class); + given(pmf.getPersistenceManager()).willReturn(pm); JdoInterceptor interceptor = new JdoInterceptor(); interceptor.setPersistenceManagerFactory(pmf); @@ -56,17 +54,13 @@ public class JdoInterceptorTests extends TestCase { fail("Should not have thrown Throwable: " + t.getMessage()); } - pmfControl.verify(); - pmControl.verify(); + verify(pm).close(); } + @Test public void testInterceptorWithPrebound() { - MockControl pmfControl = MockControl.createControl(PersistenceManagerFactory.class); - PersistenceManagerFactory pmf = (PersistenceManagerFactory) pmfControl.getMock(); - MockControl pmControl = MockControl.createControl(PersistenceManager.class); - PersistenceManager pm = (PersistenceManager) pmControl.getMock(); - pmfControl.replay(); - pmControl.replay(); + PersistenceManagerFactory pmf = mock(PersistenceManagerFactory.class); + PersistenceManager pm = mock(PersistenceManager.class); TransactionSynchronizationManager.bindResource(pmf, new PersistenceManagerHolder(pm)); JdoInterceptor interceptor = new JdoInterceptor(); @@ -80,9 +74,6 @@ public class JdoInterceptorTests extends TestCase { finally { TransactionSynchronizationManager.unbindResource(pmf); } - - pmfControl.verify(); - pmControl.verify(); } diff --git a/spring-orm/src/test/java/org/springframework/orm/jdo/JdoTemplateTests.java b/spring-orm/src/test/java/org/springframework/orm/jdo/JdoTemplateTests.java index 2baf4d205a1..29c882b2b63 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jdo/JdoTemplateTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jdo/JdoTemplateTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,12 +16,20 @@ package org.springframework.orm.jdo; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; + import javax.jdo.JDODataStoreException; import javax.jdo.JDOException; import javax.jdo.JDOFatalDataStoreException; @@ -33,44 +41,29 @@ import javax.jdo.PersistenceManager; import javax.jdo.PersistenceManagerFactory; import javax.jdo.Query; -import junit.framework.TestCase; -import org.easymock.MockControl; - +import org.junit.After; +import org.junit.Before; +import org.junit.Test; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.transaction.support.TransactionSynchronizationManager; /** * @author Juergen Hoeller + * @author Phillip Webb * @since 03.06.2003 */ -public class JdoTemplateTests extends TestCase { +public class JdoTemplateTests { - private MockControl pmfControl; private PersistenceManagerFactory pmf; - private MockControl pmControl; private PersistenceManager pm; - @Override - protected void setUp() { - pmfControl = MockControl.createControl(PersistenceManagerFactory.class); - pmf = (PersistenceManagerFactory) pmfControl.getMock(); - pmControl = MockControl.createControl(PersistenceManager.class); - pm = (PersistenceManager) pmControl.getMock(); - pmf.getConnectionFactory(); - pmfControl.setReturnValue(null, 1); - } - - @Override - protected void tearDown() { - try { - pmfControl.verify(); - pmControl.verify(); - } - catch (IllegalStateException ex) { - // ignore: test method didn't call replay - } + @Before + public void setUp() { + pmf = mock(PersistenceManagerFactory.class); + pm = mock(PersistenceManager.class); } + @Test public void testTemplateExecuteWithNotAllowCreate() { JdoTemplate jt = new JdoTemplate(); jt.setPersistenceManagerFactory(pmf); @@ -89,10 +82,8 @@ public class JdoTemplateTests extends TestCase { } } + @Test public void testTemplateExecuteWithNotAllowCreateAndThreadBound() { - pmfControl.replay(); - pmControl.replay(); - JdoTemplate jt = new JdoTemplate(pmf); jt.setAllowCreate(false); TransactionSynchronizationManager.bindResource(pmf, new PersistenceManagerHolder(pm)); @@ -108,13 +99,9 @@ public class JdoTemplateTests extends TestCase { TransactionSynchronizationManager.unbindResource(pmf); } + @Test public void testTemplateExecuteWithNewPersistenceManager() { - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); + given(pmf.getPersistenceManager()).willReturn(pm); JdoTemplate jt = new JdoTemplate(pmf); final List l = new ArrayList(); @@ -126,14 +113,11 @@ public class JdoTemplateTests extends TestCase { } }); assertTrue("Correct result list", result == l); + verify(pm).close(); } + @Test public void testTemplateExecuteWithThreadBoundAndFlushEager() { - pm.flush(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - JdoTemplate jt = new JdoTemplate(pmf); jt.setFlushEager(true); jt.setAllowCreate(false); @@ -148,481 +132,291 @@ public class JdoTemplateTests extends TestCase { }); assertTrue("Correct result list", result == l); TransactionSynchronizationManager.unbindResource(pmf); + verify(pm).flush(); } + @Test public void testGetObjectById() { - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.getObjectById("0", true); - pmControl.setReturnValue("A"); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.getObjectById("0", true)).willReturn("A"); JdoTemplate jt = new JdoTemplate(pmf); assertEquals("A", jt.getObjectById("0")); + verify(pm).close(); } + @Test public void testGetObjectByIdWithClassAndValue() { - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.getObjectById(String.class, "0"); - pmControl.setReturnValue("A"); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.getObjectById(String.class, "0")).willReturn("A"); JdoTemplate jt = new JdoTemplate(pmf); assertEquals("A", jt.getObjectById(String.class, "0")); + verify(pm).close(); } + @Test public void testEvict() { - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.evict("0"); - pmControl.setVoidCallable(1); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - + given(pmf.getPersistenceManager()).willReturn(pm); JdoTemplate jt = new JdoTemplate(pmf); jt.evict("0"); + verify(pm).evict("0"); + verify(pm).close(); } + @Test public void testEvictAllWithCollection() { Collection coll = new HashSet(); - - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.evictAll(coll); - pmControl.setVoidCallable(1); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - + given(pmf.getPersistenceManager()).willReturn(pm); JdoTemplate jt = new JdoTemplate(pmf); jt.evictAll(coll); + verify(pm).evictAll(coll); + verify(pm).close(); } + @Test public void testEvictAll() { - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.evictAll(); - pmControl.setVoidCallable(1); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - + given(pmf.getPersistenceManager()).willReturn(pm); JdoTemplate jt = new JdoTemplate(pmf); jt.evictAll(); + verify(pm).evictAll(); + verify(pm).close(); } + @Test public void testRefresh() { - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.refresh("0"); - pmControl.setVoidCallable(1); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - + given(pmf.getPersistenceManager()).willReturn(pm); JdoTemplate jt = new JdoTemplate(pmf); jt.refresh("0"); + verify(pm).refresh("0"); + verify(pm).close(); } + @Test public void testRefreshAllWithCollection() { Collection coll = new HashSet(); - - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.refreshAll(coll); - pmControl.setVoidCallable(1); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - + given(pmf.getPersistenceManager()).willReturn(pm); JdoTemplate jt = new JdoTemplate(pmf); jt.refreshAll(coll); + verify(pm).refreshAll(coll); + verify(pm).close(); } + @Test public void testRefreshAll() { - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.refreshAll(); - pmControl.setVoidCallable(1); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - + given(pmf.getPersistenceManager()).willReturn(pm); JdoTemplate jt = new JdoTemplate(pmf); jt.refreshAll(); + verify(pm).refreshAll(); + verify(pm).close(); } + @Test public void testMakePersistent() { - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.makePersistent("0"); - pmControl.setReturnValue(null, 1); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - + given(pmf.getPersistenceManager()).willReturn(pm); JdoTemplate jt = new JdoTemplate(pmf); jt.makePersistent("0"); + verify(pm).makePersistent("0"); + verify(pm).close(); } + @Test public void testMakePersistentAll() { Collection coll = new HashSet(); - - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.makePersistentAll(coll); - pmControl.setReturnValue(null, 1); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - + given(pmf.getPersistenceManager()).willReturn(pm); JdoTemplate jt = new JdoTemplate(pmf); jt.makePersistentAll(coll); + verify(pm).makePersistentAll(coll); + verify(pm).close(); } + @Test public void testDeletePersistent() { - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.deletePersistent("0"); - pmControl.setVoidCallable(1); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - + given(pmf.getPersistenceManager()).willReturn(pm); JdoTemplate jt = new JdoTemplate(pmf); jt.deletePersistent("0"); + verify(pm).deletePersistent("0"); + verify(pm).close(); } + @Test public void testDeletePersistentAll() { Collection coll = new HashSet(); - - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.deletePersistentAll(coll); - pmControl.setVoidCallable(1); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - + given(pmf.getPersistenceManager()).willReturn(pm); JdoTemplate jt = new JdoTemplate(pmf); jt.deletePersistentAll(coll); + verify(pm).deletePersistentAll(coll); + verify(pm).close(); } + @Test public void testDetachCopy() { - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.detachCopy("0"); - pmControl.setReturnValue("0x", 1); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.detachCopy("0")).willReturn("0x"); JdoTemplate jt = new JdoTemplate(pmf); assertEquals("0x", jt.detachCopy("0")); + verify(pm).close(); } + @Test public void testDetachCopyAll() { Collection attached = new HashSet(); Collection detached = new HashSet(); - - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.detachCopyAll(attached); - pmControl.setReturnValue(detached, 1); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.detachCopyAll(attached)).willReturn(detached); JdoTemplate jt = new JdoTemplate(pmf); assertEquals(detached, jt.detachCopyAll(attached)); + verify(pm).close(); } + @Test public void testFlush() { - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.flush(); - pmControl.setVoidCallable(1); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - + given(pmf.getPersistenceManager()).willReturn(pm); JdoTemplate jt = new JdoTemplate(pmf); jt.flush(); + verify(pm).flush(); + verify(pm).close(); } + @Test public void testFlushWithDialect() { - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.flush(); - pmControl.setVoidCallable(1); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - + given(pmf.getPersistenceManager()).willReturn(pm); JdoTemplate jt = new JdoTemplate(pmf); jt.flush(); + verify(pm).flush(); + verify(pm).close(); } + @Test public void testFind() { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.newQuery(String.class); - pmControl.setReturnValue(query); + Query query = mock(Query.class); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.newQuery(String.class)).willReturn(query); Collection coll = new HashSet(); - query.execute(); - queryControl.setReturnValue(coll); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - queryControl.replay(); - + given(query.execute()).willReturn(coll); JdoTemplate jt = new JdoTemplate(pmf); assertEquals(coll, jt.find(String.class)); - queryControl.verify(); + verify(pm).close(); } + @Test public void testFindWithFilter() { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.newQuery(String.class, "a == b"); - pmControl.setReturnValue(query); + Query query = mock(Query.class); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.newQuery(String.class, "a == b")).willReturn(query); Collection coll = new HashSet(); - query.execute(); - queryControl.setReturnValue(coll); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - queryControl.replay(); - + given(query.execute()).willReturn(coll); JdoTemplate jt = new JdoTemplate(pmf); assertEquals(coll, jt.find(String.class, "a == b")); - queryControl.verify(); + verify(pm).close(); } + @Test public void testFindWithFilterAndOrdering() { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.newQuery(String.class, "a == b"); - pmControl.setReturnValue(query); - query.setOrdering("c asc"); - queryControl.setVoidCallable(1); + Query query = mock(Query.class); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.newQuery(String.class, "a == b")).willReturn(query); Collection coll = new HashSet(); - query.execute(); - queryControl.setReturnValue(coll); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - queryControl.replay(); - + given(query.execute()).willReturn(coll); JdoTemplate jt = new JdoTemplate(pmf); assertEquals(coll, jt.find(String.class, "a == b", "c asc")); - queryControl.verify(); + verify(query).setOrdering("c asc"); + verify(pm).close(); } + @Test public void testFindWithParameterArray() { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.newQuery(String.class, "a == b"); - pmControl.setReturnValue(query); - query.declareParameters("params"); - queryControl.setVoidCallable(1); + Query query = mock(Query.class); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.newQuery(String.class, "a == b")).willReturn(query); Object[] values = new Object[0]; Collection coll = new HashSet(); - query.executeWithArray(values); - queryControl.setReturnValue(coll); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - queryControl.replay(); - + given(query.executeWithArray(values)).willReturn(coll); JdoTemplate jt = new JdoTemplate(pmf); assertEquals(coll, jt.find(String.class, "a == b", "params", values)); - queryControl.verify(); + verify(query).declareParameters("params"); + verify(pm).close(); } + @Test public void testFindWithParameterArrayAndOrdering() { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.newQuery(String.class, "a == b"); - pmControl.setReturnValue(query); - query.declareParameters("params"); - queryControl.setVoidCallable(1); - query.setOrdering("c asc"); - queryControl.setVoidCallable(1); + Query query = mock(Query.class); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.newQuery(String.class, "a == b")).willReturn(query); Object[] values = new Object[0]; Collection coll = new HashSet(); - query.executeWithArray(values); - queryControl.setReturnValue(coll); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - queryControl.replay(); - + given(query.executeWithArray(values)).willReturn(coll); JdoTemplate jt = new JdoTemplate(pmf); assertEquals(coll, jt.find(String.class, "a == b", "params", values, "c asc")); - queryControl.verify(); + verify(query).declareParameters("params"); + verify(query).setOrdering("c asc"); + verify(pm).close(); } + @Test public void testFindWithParameterMap() { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.newQuery(String.class, "a == b"); - pmControl.setReturnValue(query); - query.declareParameters("params"); - queryControl.setVoidCallable(1); + Query query = mock(Query.class); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.newQuery(String.class, "a == b")).willReturn(query); Map values = new HashMap(); Collection coll = new HashSet(); - query.executeWithMap(values); - queryControl.setReturnValue(coll); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - queryControl.replay(); - + given(query.executeWithMap(values)).willReturn(coll); JdoTemplate jt = new JdoTemplate(pmf); assertEquals(coll, jt.find(String.class, "a == b", "params", values)); - queryControl.verify(); + verify(query).declareParameters("params"); + verify(pm).close(); } + @Test public void testFindWithParameterMapAndOrdering() { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.newQuery(String.class, "a == b"); - pmControl.setReturnValue(query); - query.declareParameters("params"); - queryControl.setVoidCallable(1); - query.setOrdering("c asc"); - queryControl.setVoidCallable(1); + Query query = mock(Query.class); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.newQuery(String.class, "a == b")).willReturn(query); Map values = new HashMap(); Collection coll = new HashSet(); - query.executeWithMap(values); - queryControl.setReturnValue(coll); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - queryControl.replay(); - + given(query.executeWithMap(values)).willReturn(coll); JdoTemplate jt = new JdoTemplate(pmf); assertEquals(coll, jt.find(String.class, "a == b", "params", values, "c asc")); - queryControl.verify(); + verify(query).declareParameters("params"); + verify(query).setOrdering("c asc"); + verify(pm).close(); } + @Test public void testFindWithLanguageAndQueryObject() { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.newQuery(Query.SQL, "some SQL"); - pmControl.setReturnValue(query); + Query query = mock(Query.class); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.newQuery(Query.SQL, "some SQL")).willReturn(query); Collection coll = new HashSet(); - query.execute(); - queryControl.setReturnValue(coll); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - queryControl.replay(); - + given(query.execute()).willReturn(coll); JdoTemplate jt = new JdoTemplate(pmf); assertEquals(coll, jt.find(Query.SQL, "some SQL")); - queryControl.verify(); + verify(pm).close(); } + @Test public void testFindWithQueryString() { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.newQuery("single string query"); - pmControl.setReturnValue(query); + Query query = mock(Query.class); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.newQuery("single string query")).willReturn(query); Collection coll = new HashSet(); - query.execute(); - queryControl.setReturnValue(coll); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - queryControl.replay(); - + given(query.execute()).willReturn(coll); JdoTemplate jt = new JdoTemplate(pmf); assertEquals(coll, jt.find("single string query")); - queryControl.verify(); + verify(pm).close(); } + @Test public void testFindByNamedQuery() { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm); - pm.newNamedQuery(String.class, "some query name"); - pmControl.setReturnValue(query); + Query query = mock(Query.class); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.newNamedQuery(String.class, "some query name")).willReturn(query); Collection coll = new HashSet(); - query.execute(); - queryControl.setReturnValue(coll); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - queryControl.replay(); - + given(query.execute()).willReturn(coll); JdoTemplate jt = new JdoTemplate(pmf); assertEquals(coll, jt.findByNamedQuery(String.class, "some query name")); - queryControl.verify(); + verify(pm).close(); } + @Test public void testTemplateExceptions() { try { createTemplate().execute(new JdoCallback() { @@ -716,13 +510,11 @@ public class JdoTemplateTests extends TestCase { } } + @Test public void testTranslateException() { - MockControl dialectControl = MockControl.createControl(JdoDialect.class); - JdoDialect dialect = (JdoDialect) dialectControl.getMock(); + JdoDialect dialect = mock(JdoDialect.class); final JDOException ex = new JDOException(); - dialect.translateException(ex); - dialectControl.setReturnValue(new DataIntegrityViolationException("test", ex)); - dialectControl.replay(); + given(dialect.translateException(ex)).willReturn(new DataIntegrityViolationException("test", ex)); try { JdoTemplate template = createTemplate(); template.setJdoDialect(dialect); @@ -737,20 +529,10 @@ public class JdoTemplateTests extends TestCase { catch (DataIntegrityViolationException dive) { // expected } - dialectControl.verify(); } private JdoTemplate createTemplate() { - pmfControl.reset(); - pmControl.reset(); - pmf.getConnectionFactory(); - pmfControl.setReturnValue(null, 1); - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); + given(pmf.getPersistenceManager()).willReturn(pm); return new JdoTemplate(pmf); } diff --git a/spring-orm/src/test/java/org/springframework/orm/jdo/JdoTransactionManagerTests.java b/spring-orm/src/test/java/org/springframework/orm/jdo/JdoTransactionManagerTests.java index b4e67916280..538ce2572ba 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jdo/JdoTransactionManagerTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jdo/JdoTransactionManagerTests.java @@ -16,6 +16,17 @@ package org.springframework.orm.jdo; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willThrow; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + import java.lang.reflect.Proxy; import java.sql.Connection; import java.sql.DatabaseMetaData; @@ -23,6 +34,7 @@ import java.sql.SQLException; import java.sql.Savepoint; import java.util.ArrayList; import java.util.List; + import javax.jdo.JDOFatalDataStoreException; import javax.jdo.PersistenceManager; import javax.jdo.PersistenceManagerFactory; @@ -33,16 +45,16 @@ import javax.transaction.Status; import javax.transaction.TransactionManager; import javax.transaction.UserTransaction; -import junit.framework.TestCase; -import org.easymock.MockControl; - -import org.springframework.tests.sample.beans.TestBean; -import org.springframework.tests.transaction.MockJtaTransaction; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; import org.springframework.jdbc.datasource.ConnectionHandle; import org.springframework.jdbc.datasource.ConnectionHolder; import org.springframework.jdbc.datasource.SimpleConnectionHandle; import org.springframework.orm.jdo.support.SpringPersistenceManagerProxyBean; import org.springframework.orm.jdo.support.StandardPersistenceManagerProxyBean; +import org.springframework.tests.sample.beans.TestBean; +import org.springframework.tests.transaction.MockJtaTransaction; import org.springframework.transaction.InvalidIsolationLevelException; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; @@ -55,10 +67,9 @@ import org.springframework.transaction.support.TransactionTemplate; /** * @author Juergen Hoeller + * @author Phillip Webb */ -public class JdoTransactionManagerTests extends TestCase { - - private MockControl pmfControl, pmControl, txControl; +public class JdoTransactionManagerTests { private PersistenceManagerFactory pmf; @@ -67,55 +78,26 @@ public class JdoTransactionManagerTests extends TestCase { private Transaction tx; - @Override - protected void setUp() { - pmfControl = MockControl.createControl(PersistenceManagerFactory.class); - pmf = (PersistenceManagerFactory) pmfControl.getMock(); - pmControl = MockControl.createControl(PersistenceManager.class); - pm = (PersistenceManager) pmControl.getMock(); - txControl = MockControl.createControl(Transaction.class); - tx = (Transaction) txControl.getMock(); - pmf.getConnectionFactory(); - pmfControl.setReturnValue(null, 1); + @Before + public void setUp() { + pmf = mock(PersistenceManagerFactory.class); + pm = mock(PersistenceManager.class); + tx = mock(Transaction.class); } - @Override - protected void tearDown() { - try { - pmfControl.verify(); - pmControl.verify(); - } - catch (IllegalStateException ex) { - // ignore: test method didn't call replay - } + @After + public void tearDown() { assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); assertFalse(TransactionSynchronizationManager.isCurrentTransactionReadOnly()); assertFalse(TransactionSynchronizationManager.isActualTransactionActive()); } + @Test public void testTransactionCommit() { - pmf.getConnectionFactory(); - pmfControl.setReturnValue(null, 3); - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pmf.getPersistenceManagerProxy(); - pmfControl.setReturnValue(pm, 1); - pm.currentTransaction(); - pmControl.setReturnValue(tx, 3); - pm.flush(); - pmControl.setVoidCallable(4); - pm.close(); - pmControl.setVoidCallable(1); - tx.begin(); - txControl.setVoidCallable(1); - tx.getRollbackOnly(); - txControl.setReturnValue(false, 1); - tx.commit(); - txControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - txControl.replay(); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pmf.getPersistenceManagerProxy()).willReturn(pm); + given(pm.currentTransaction()).willReturn(tx); PlatformTransactionManager tm = new JdoTransactionManager(pmf); TransactionTemplate tt = new TransactionTemplate(tm); @@ -164,26 +146,18 @@ public class JdoTransactionManagerTests extends TestCase { assertTrue("Hasn't thread pm", !TransactionSynchronizationManager.hasResource(pmf)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); + + verify(pm, times(4)).flush(); + verify(pm).close(); + verify(tx).begin(); + verify(tx).commit(); } + @Test public void testTransactionRollback() { - pmf.getConnectionFactory(); - pmfControl.setReturnValue(null, 2); - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pm.currentTransaction(); - pmControl.setReturnValue(tx, 2); - pm.close(); - pmControl.setVoidCallable(1); - tx.begin(); - txControl.setVoidCallable(1); - tx.isActive(); - txControl.setReturnValue(true, 1); - tx.rollback(); - txControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - txControl.replay(); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.currentTransaction()).willReturn(tx); + given(tx.isActive()).willReturn(true); PlatformTransactionManager tm = new JdoTransactionManager(pmf); TransactionTemplate tt = new TransactionTemplate(tm); @@ -212,24 +186,16 @@ public class JdoTransactionManagerTests extends TestCase { assertTrue("Hasn't thread pm", !TransactionSynchronizationManager.hasResource(pmf)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); + + verify(pm).close(); + verify(tx).begin(); + verify(tx).rollback(); } + @Test public void testTransactionRollbackWithAlreadyRolledBack() { - pmf.getConnectionFactory(); - pmfControl.setReturnValue(null, 2); - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pm.currentTransaction(); - pmControl.setReturnValue(tx, 2); - pm.close(); - pmControl.setVoidCallable(1); - tx.begin(); - txControl.setVoidCallable(1); - tx.isActive(); - txControl.setReturnValue(false, 1); - pmfControl.replay(); - pmControl.replay(); - txControl.replay(); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.currentTransaction()).willReturn(tx); PlatformTransactionManager tm = new JdoTransactionManager(pmf); TransactionTemplate tt = new TransactionTemplate(tm); @@ -258,28 +224,16 @@ public class JdoTransactionManagerTests extends TestCase { assertTrue("Hasn't thread pm", !TransactionSynchronizationManager.hasResource(pmf)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); + + verify(pm).close(); + verify(tx).begin(); } + @Test public void testTransactionRollbackOnly() { - pmf.getConnectionFactory(); - pmfControl.setReturnValue(null, 2); - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pm.currentTransaction(); - pmControl.setReturnValue(tx, 2); - pm.flush(); - pmControl.setVoidCallable(1); - pm.close(); - pmControl.setVoidCallable(1); - tx.begin(); - txControl.setVoidCallable(1); - tx.isActive(); - txControl.setReturnValue(true, 1); - tx.rollback(); - txControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - txControl.replay(); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.currentTransaction()).willReturn(tx); + given(tx.isActive()).willReturn(true); PlatformTransactionManager tm = new JdoTransactionManager(pmf); TransactionTemplate tt = new TransactionTemplate(tm); @@ -303,24 +257,18 @@ public class JdoTransactionManagerTests extends TestCase { }); assertTrue("Hasn't thread pm", !TransactionSynchronizationManager.hasResource(pmf)); + + verify(pm).flush(); + verify(pm).close(); + verify(tx).begin(); + verify(tx).rollback(); } + @Test public void testParticipatingTransactionWithCommit() { - pmf.getConnectionFactory(); - pmfControl.setReturnValue(null, 2); - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pm.currentTransaction(); - pmControl.setReturnValue(tx, 3); - pm.flush(); - pmControl.setVoidCallable(1); - pm.close(); - pmControl.setVoidCallable(1); - tx.begin(); - txControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - txControl.replay(); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.currentTransaction()).willReturn(tx); + given(tx.isActive()).willReturn(true); PlatformTransactionManager tm = new JdoTransactionManager(pmf); final TransactionTemplate tt = new TransactionTemplate(tm); @@ -330,14 +278,6 @@ public class JdoTransactionManagerTests extends TestCase { Object result = tt.execute(new TransactionCallback() { @Override public Object doInTransaction(TransactionStatus status) { - txControl.reset(); - tx.isActive(); - txControl.setReturnValue(true, 1); - tx.getRollbackOnly(); - txControl.setReturnValue(false, 1); - tx.commit(); - txControl.setVoidCallable(1); - txControl.replay(); return tt.execute(new TransactionCallback() { @Override @@ -355,24 +295,17 @@ public class JdoTransactionManagerTests extends TestCase { } }); assertTrue("Correct result list", result == l); + + verify(pm).flush(); + verify(pm).close(); + verify(tx).begin(); } + @Test public void testParticipatingTransactionWithRollback() { - pmf.getConnectionFactory(); - pmfControl.setReturnValue(null, 2); - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pm.currentTransaction(); - pmControl.setReturnValue(tx, 3); - pm.close(); - pmControl.setVoidCallable(1); - tx.isActive(); - txControl.setReturnValue(false, 1); - tx.begin(); - txControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - txControl.replay(); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.currentTransaction()).willReturn(tx); + given(tx.isActive()).willReturn(true); PlatformTransactionManager tm = new JdoTransactionManager(pmf); final TransactionTemplate tt = new TransactionTemplate(tm); @@ -380,15 +313,6 @@ public class JdoTransactionManagerTests extends TestCase { tt.execute(new TransactionCallback() { @Override public Object doInTransaction(TransactionStatus status) { - txControl.reset(); - tx.isActive(); - txControl.setReturnValue(true, 3); - tx.setRollbackOnly(); - txControl.setVoidCallable(1); - tx.rollback(); - txControl.setVoidCallable(1); - txControl.replay(); - return tt.execute(new TransactionCallback() { @Override public Object doInTransaction(TransactionStatus status) { @@ -408,24 +332,19 @@ public class JdoTransactionManagerTests extends TestCase { catch (RuntimeException ex) { // expected } + verify(pm).close(); + verify(tx).begin(); + verify(tx).setRollbackOnly(); + verify(tx).rollback(); } + @Test public void testParticipatingTransactionWithRollbackOnly() { - pmf.getConnectionFactory(); - pmfControl.setReturnValue(null, 2); - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pm.currentTransaction(); - pmControl.setReturnValue(tx, 5); - pm.flush(); - pmControl.setVoidCallable(1); - pm.close(); - pmControl.setVoidCallable(1); - tx.begin(); - txControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - txControl.replay(); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.currentTransaction()).willReturn(tx); + given(tx.isActive()).willReturn(true); + given(tx.getRollbackOnly()).willReturn(true); + willThrow(new JDOFatalDataStoreException()).given(tx).commit(); PlatformTransactionManager tm = new JdoTransactionManager(pmf); final TransactionTemplate tt = new TransactionTemplate(tm); @@ -436,19 +355,6 @@ public class JdoTransactionManagerTests extends TestCase { tt.execute(new TransactionCallback() { @Override public Object doInTransaction(TransactionStatus status) { - txControl.reset(); - tx.isActive(); - txControl.setReturnValue(true, 1); - tx.setRollbackOnly(); - txControl.setVoidCallable(1); - tx.getRollbackOnly(); - txControl.setReturnValue(true, 1); - tx.commit(); - txControl.setThrowable(new JDOFatalDataStoreException(), 1); - tx.isActive(); - txControl.setReturnValue(false, 1); - txControl.replay(); - return tt.execute(new TransactionCallback() { @Override public Object doInTransaction(TransactionStatus status) { @@ -471,24 +377,17 @@ public class JdoTransactionManagerTests extends TestCase { catch (JdoResourceFailureException ex) { // expected } + verify(pm).flush(); + verify(pm).close(); + verify(tx).begin(); + verify(tx).setRollbackOnly(); } + @Test public void testParticipatingTransactionWithWithRequiresNew() { - pmf.getConnectionFactory(); - pmfControl.setReturnValue(null, 2); - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 2); - pm.currentTransaction(); - pmControl.setReturnValue(tx, 6); - tx.begin(); - txControl.setVoidCallable(1); - pm.flush(); - pmControl.setVoidCallable(1); - pm.close(); - pmControl.setVoidCallable(2); - pmfControl.replay(); - pmControl.replay(); - txControl.replay(); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.currentTransaction()).willReturn(tx); + given(tx.isActive()).willReturn(true); PlatformTransactionManager tm = new JdoTransactionManager(pmf); final TransactionTemplate tt = new TransactionTemplate(tm); @@ -499,18 +398,6 @@ public class JdoTransactionManagerTests extends TestCase { Object result = tt.execute(new TransactionCallback() { @Override public Object doInTransaction(TransactionStatus status) { - txControl.verify(); - txControl.reset(); - tx.isActive(); - txControl.setReturnValue(true, 1); - tx.begin(); - txControl.setVoidCallable(1); - tx.getRollbackOnly(); - txControl.setReturnValue(false, 2); - tx.commit(); - txControl.setVoidCallable(2); - txControl.replay(); - return tt.execute(new TransactionCallback() { @Override public Object doInTransaction(TransactionStatus status) { @@ -527,24 +414,17 @@ public class JdoTransactionManagerTests extends TestCase { } }); assertTrue("Correct result list", result == l); + verify(tx, times(2)).begin(); + verify(tx, times(2)).commit(); + verify(pm).flush(); + verify(pm, times(2)).close(); } + @Test public void testParticipatingTransactionWithWithRequiresNewAndPrebound() { - pmf.getConnectionFactory(); - pmfControl.setReturnValue(null, 3); - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pm.currentTransaction(); - pmControl.setReturnValue(tx, 6); - tx.begin(); - txControl.setVoidCallable(1); - pm.flush(); - pmControl.setVoidCallable(1); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - txControl.replay(); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.currentTransaction()).willReturn(tx); + given(tx.isActive()).willReturn(true); PlatformTransactionManager tm = new JdoTransactionManager(pmf); final TransactionTemplate tt = new TransactionTemplate(tm); @@ -558,18 +438,6 @@ public class JdoTransactionManagerTests extends TestCase { Object result = tt.execute(new TransactionCallback() { @Override public Object doInTransaction(TransactionStatus status) { - txControl.verify(); - txControl.reset(); - tx.isActive(); - txControl.setReturnValue(true, 1); - tx.begin(); - txControl.setVoidCallable(1); - tx.getRollbackOnly(); - txControl.setReturnValue(false, 2); - tx.commit(); - txControl.setVoidCallable(2); - txControl.replay(); - JdoTemplate jt = new JdoTemplate(pmf); jt.execute(new JdoCallback() { @Override @@ -598,29 +466,18 @@ public class JdoTransactionManagerTests extends TestCase { assertTrue("Has thread pm", TransactionSynchronizationManager.hasResource(pmf)); TransactionSynchronizationManager.unbindResource(pmf); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); + + verify(tx, times(2)).begin(); + verify(tx, times(2)).commit(); + verify(pm).flush(); + verify(pm).close(); } + @Test public void testJtaTransactionCommit() throws Exception { - MockControl utControl = MockControl.createControl(UserTransaction.class); - UserTransaction ut = (UserTransaction) utControl.getMock(); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_NO_TRANSACTION, 1); - ut.begin(); - utControl.setVoidCallable(1); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_ACTIVE, 2); - ut.commit(); - utControl.setVoidCallable(1); - utControl.replay(); - - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pm.flush(); - pmControl.setVoidCallable(2); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); + UserTransaction ut = mock(UserTransaction.class); + given(ut.getStatus()).willReturn(Status.STATUS_NO_TRANSACTION, Status.STATUS_ACTIVE); + given(pmf.getPersistenceManager()).willReturn(pm); JtaTransactionManager ptm = new JtaTransactionManager(ut); TransactionTemplate tt = new TransactionTemplate(ptm); @@ -660,31 +517,22 @@ public class JdoTransactionManagerTests extends TestCase { assertTrue("Hasn't thread pm", !TransactionSynchronizationManager.hasResource(pmf)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - utControl.verify(); + + verify(ut).begin(); + verify(ut).commit(); + verify(pm, times(2)).flush(); + verify(pm, times(2)).close(); } + @Test public void testParticipatingJtaTransactionWithWithRequiresNewAndPrebound() throws Exception { - final MockControl utControl = MockControl.createControl(UserTransaction.class); - final UserTransaction ut = (UserTransaction) utControl.getMock(); - final MockControl tmControl = MockControl.createControl(TransactionManager.class); - final TransactionManager tm = (TransactionManager) tmControl.getMock(); + final UserTransaction ut = mock(UserTransaction.class); + final TransactionManager tm = mock(TransactionManager.class); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_NO_TRANSACTION, 1); - ut.begin(); - utControl.setVoidCallable(1); - utControl.replay(); - - pmf.getConnectionFactory(); - pmfControl.setReturnValue(null, 1); - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pm.flush(); - pmControl.setVoidCallable(1); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); + given(ut.getStatus()).willReturn(Status.STATUS_NO_TRANSACTION, + Status.STATUS_ACTIVE, Status.STATUS_ACTIVE, Status.STATUS_ACTIVE, + Status.STATUS_ACTIVE, Status.STATUS_ACTIVE); + given(pmf.getPersistenceManager()).willReturn(pm); JtaTransactionManager ptm = new JtaTransactionManager(ut, tm); final TransactionTemplate tt = new TransactionTemplate(ptm); @@ -699,23 +547,8 @@ public class JdoTransactionManagerTests extends TestCase { @Override public Object doInTransaction(TransactionStatus status) { try { - utControl.verify(); - utControl.reset(); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_ACTIVE, 1); MockJtaTransaction transaction = new MockJtaTransaction(); - tm.suspend(); - tmControl.setReturnValue(transaction, 1); - ut.begin(); - utControl.setVoidCallable(1); - ut.getStatus(); - utControl.setReturnValue(Status.STATUS_ACTIVE, 4); - ut.commit(); - utControl.setVoidCallable(2); - tm.resume(transaction); - tmControl.setVoidCallable(1); - utControl.replay(); - tmControl.replay(); + given(tm.suspend()).willReturn(transaction); } catch (Exception ex) { } @@ -748,19 +581,15 @@ public class JdoTransactionManagerTests extends TestCase { assertTrue("Has thread pm", TransactionSynchronizationManager.hasResource(pmf)); TransactionSynchronizationManager.unbindResource(pmf); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - utControl.verify(); + + verify(ut, times(2)).begin(); + verify(pm).flush(); + verify(pm, times(2)).close(); } - + @Test public void testTransactionCommitWithPropagationSupports() { - pmf.getConnectionFactory(); - pmfControl.setReturnValue(null, 2); - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); + given(pmf.getPersistenceManager()).willReturn(pm); PlatformTransactionManager tm = new JdoTransactionManager(pmf); TransactionTemplate tt = new TransactionTemplate(tm); @@ -786,19 +615,14 @@ public class JdoTransactionManagerTests extends TestCase { assertTrue("Correct result list", result == l); assertTrue("Hasn't thread pm", !TransactionSynchronizationManager.hasResource(pmf)); + + verify(pm, times(2)).close(); } + @Test public void testInvalidIsolation() { - pmf.getConnectionFactory(); - pmfControl.setReturnValue(null, 1); - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pm.currentTransaction(); - pmControl.setReturnValue(null, 1); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.currentTransaction()).willReturn(tx); PlatformTransactionManager tm = new JdoTransactionManager(pmf); TransactionTemplate tt = new TransactionTemplate(tm); @@ -814,24 +638,12 @@ public class JdoTransactionManagerTests extends TestCase { catch (InvalidIsolationLevelException ex) { // expected } + verify(pm).close(); } + @Test public void testTransactionCommitWithPrebound() { - pmf.getConnectionFactory(); - pmfControl.setReturnValue(null, 2); - pm.currentTransaction(); - pmControl.setReturnValue(tx, 3); - tx.isActive(); - txControl.setReturnValue(false, 1); - tx.begin(); - txControl.setVoidCallable(1); - tx.getRollbackOnly(); - txControl.setReturnValue(false, 1); - tx.commit(); - txControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - txControl.replay(); + given(pm.currentTransaction()).willReturn(tx); PlatformTransactionManager tm = new JdoTransactionManager(pmf); TransactionTemplate tt = new TransactionTemplate(tm); @@ -859,42 +671,22 @@ public class JdoTransactionManagerTests extends TestCase { assertTrue("Has thread pm", TransactionSynchronizationManager.hasResource(pmf)); TransactionSynchronizationManager.unbindResource(pmf); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); + + verify(tx).begin(); + verify(tx).commit(); } + @Test public void testTransactionCommitWithDataSource() throws SQLException { - MockControl dsControl = MockControl.createControl(DataSource.class); - final DataSource ds = (DataSource) dsControl.getMock(); - MockControl dialectControl = MockControl.createControl(JdoDialect.class); - JdoDialect dialect = (JdoDialect) dialectControl.getMock(); - MockControl conControl = MockControl.createControl(Connection.class); - final Connection con = (Connection) conControl.getMock(); + final DataSource ds = mock(DataSource.class); + JdoDialect dialect = mock(JdoDialect.class); + final Connection con = mock(Connection.class); ConnectionHandle conHandle = new SimpleConnectionHandle(con); - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pm.currentTransaction(); - pmControl.setReturnValue(tx, 3); - pm.close(); - pmControl.setVoidCallable(1); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.currentTransaction()).willReturn(tx); TransactionTemplate tt = new TransactionTemplate(); - dialect.beginTransaction(tx, tt); - dialectControl.setReturnValue(null, 1); - dialect.getJdbcConnection(pm, false); - dialectControl.setReturnValue(conHandle, 1); - dialect.releaseJdbcConnection(conHandle, pm); - dialectControl.setVoidCallable(1); - dialect.cleanupTransaction(null); - dialectControl.setVoidCallable(1); - tx.getRollbackOnly(); - txControl.setReturnValue(false, 1); - tx.commit(); - txControl.setVoidCallable(1); - pmfControl.replay(); - dsControl.replay(); - dialectControl.replay(); - pmControl.replay(); - txControl.replay(); - conControl.replay(); + given(dialect.getJdbcConnection(pm, false)).willReturn(conHandle); JdoTransactionManager tm = new JdoTransactionManager(); tm.setPersistenceManagerFactory(pmf); @@ -923,50 +715,26 @@ public class JdoTransactionManagerTests extends TestCase { assertTrue("Hasn't thread pm", !TransactionSynchronizationManager.hasResource(pmf)); assertTrue("Hasn't thread con", !TransactionSynchronizationManager.hasResource(ds)); - dsControl.verify(); - dialectControl.verify(); - conControl.verify(); + + verify(pm).close(); + verify(dialect).beginTransaction(tx, tt); + verify(dialect).releaseJdbcConnection(conHandle, pm); + verify(dialect).cleanupTransaction(null); + verify(tx).commit(); } + @Test public void testTransactionCommitWithAutoDetectedDataSource() throws SQLException { - MockControl dsControl = MockControl.createControl(DataSource.class); - final DataSource ds = (DataSource) dsControl.getMock(); - MockControl dialectControl = MockControl.createControl(JdoDialect.class); - JdoDialect dialect = (JdoDialect) dialectControl.getMock(); - MockControl conControl = MockControl.createControl(Connection.class); - final Connection con = (Connection) conControl.getMock(); + final DataSource ds = mock(DataSource.class); + JdoDialect dialect = mock(JdoDialect.class); + final Connection con = mock(Connection.class); ConnectionHandle conHandle = new SimpleConnectionHandle(con); - pmfControl.reset(); - pmf.getConnectionFactory(); - pmfControl.setReturnValue(ds, 2); - con.getMetaData(); - conControl.setReturnValue(null, 1); - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pm.currentTransaction(); - pmControl.setReturnValue(tx, 3); - pm.close(); - pmControl.setVoidCallable(1); + given(pmf.getConnectionFactory()).willReturn(ds); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.currentTransaction()).willReturn(tx); TransactionTemplate tt = new TransactionTemplate(); - dialect.beginTransaction(tx, tt); - dialectControl.setReturnValue(null, 1); - dialect.getJdbcConnection(pm, false); - dialectControl.setReturnValue(conHandle, 1); - dialect.releaseJdbcConnection(conHandle, pm); - dialectControl.setVoidCallable(1); - dialect.cleanupTransaction(null); - dialectControl.setVoidCallable(1); - tx.getRollbackOnly(); - txControl.setReturnValue(false, 1); - tx.commit(); - txControl.setVoidCallable(1); - pmfControl.replay(); - dsControl.replay(); - dialectControl.replay(); - pmControl.replay(); - txControl.replay(); - conControl.replay(); + given(dialect.getJdbcConnection(pm, false)).willReturn(conHandle); JdoTransactionManager tm = new JdoTransactionManager(); tm.setPersistenceManagerFactory(pmf); @@ -995,46 +763,24 @@ public class JdoTransactionManagerTests extends TestCase { assertTrue("Hasn't thread pm", !TransactionSynchronizationManager.hasResource(pmf)); assertTrue("Hasn't thread con", !TransactionSynchronizationManager.hasResource(ds)); - dsControl.verify(); - dialectControl.verify(); - conControl.verify(); + + verify(pm).close(); + verify(dialect).beginTransaction(tx, tt); + verify(dialect).releaseJdbcConnection(conHandle, pm); + verify(dialect).cleanupTransaction(null); + verify(tx).commit(); } + @Test public void testTransactionCommitWithAutoDetectedDataSourceAndNoConnection() throws SQLException { - MockControl dsControl = MockControl.createControl(DataSource.class); - final DataSource ds = (DataSource) dsControl.getMock(); - MockControl dialectControl = MockControl.createControl(JdoDialect.class); - final JdoDialect dialect = (JdoDialect) dialectControl.getMock(); - MockControl conControl = MockControl.createControl(Connection.class); + final DataSource ds = mock(DataSource.class); + final JdoDialect dialect = mock(JdoDialect.class); - pmfControl.reset(); - pmf.getConnectionFactory(); - pmfControl.setReturnValue(ds, 1); - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pm.currentTransaction(); - pmControl.setReturnValue(tx, 3); - pm.flush(); - pmControl.setVoidCallable(1); - pm.close(); - pmControl.setVoidCallable(1); + given(pmf.getConnectionFactory()).willReturn(ds); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.currentTransaction()).willReturn(tx); TransactionTemplate tt = new TransactionTemplate(); - dialect.beginTransaction(tx, tt); - dialectControl.setReturnValue(null, 1); - dialect.getJdbcConnection(pm, false); - dialectControl.setReturnValue(null, 1); - dialect.cleanupTransaction(null); - dialectControl.setVoidCallable(1); - tx.getRollbackOnly(); - txControl.setReturnValue(false, 1); - tx.commit(); - txControl.setVoidCallable(1); - pmfControl.replay(); - dsControl.replay(); - dialectControl.replay(); - pmControl.replay(); - txControl.replay(); - conControl.replay(); + given(dialect.getJdbcConnection(pm, false)).willReturn(null); JdoTransactionManager tm = new JdoTransactionManager(); tm.setPersistenceManagerFactory(pmf); @@ -1066,15 +812,20 @@ public class JdoTransactionManagerTests extends TestCase { assertTrue("Hasn't thread pm", !TransactionSynchronizationManager.hasResource(pmf)); assertTrue("Hasn't thread con", !TransactionSynchronizationManager.hasResource(ds)); - dsControl.verify(); - dialectControl.verify(); - conControl.verify(); + + verify(pm).flush(); + verify(pm).close(); + verify(dialect).beginTransaction(tx, tt); + verify(dialect).cleanupTransaction(null); + verify(tx).commit(); } + @Test public void testExistingTransactionWithPropagationNestedAndRollback() throws SQLException { doTestExistingTransactionWithPropagationNestedAndRollback(false); } + @Test public void testExistingTransactionWithManualSavepointAndRollback() throws SQLException { doTestExistingTransactionWithPropagationNestedAndRollback(true); } @@ -1082,60 +833,22 @@ public class JdoTransactionManagerTests extends TestCase { private void doTestExistingTransactionWithPropagationNestedAndRollback(final boolean manualSavepoint) throws SQLException { - MockControl dsControl = MockControl.createControl(DataSource.class); - final DataSource ds = (DataSource) dsControl.getMock(); - MockControl dialectControl = MockControl.createControl(JdoDialect.class); - JdoDialect dialect = (JdoDialect) dialectControl.getMock(); - MockControl conControl = MockControl.createControl(Connection.class); - final Connection con = (Connection) conControl.getMock(); - MockControl mdControl = MockControl.createControl(DatabaseMetaData.class); - DatabaseMetaData md = (DatabaseMetaData) mdControl.getMock(); - MockControl spControl = MockControl.createControl(Savepoint.class); - Savepoint sp = (Savepoint) spControl.getMock(); + final DataSource ds = mock(DataSource.class); + JdoDialect dialect = mock(JdoDialect.class); + final Connection con = mock(Connection.class); + DatabaseMetaData md = mock(DatabaseMetaData.class); + Savepoint sp = mock(Savepoint.class); - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pm.currentTransaction(); - pmControl.setReturnValue(tx, 3); - pm.flush(); - pmControl.setVoidCallable(1); - pm.close(); - pmControl.setVoidCallable(1); - md.supportsSavepoints(); - mdControl.setReturnValue(true, 1); - con.getMetaData(); - conControl.setReturnValue(md, 1); - con.setSavepoint(ConnectionHolder.SAVEPOINT_NAME_PREFIX + 1); - conControl.setReturnValue(sp, 1); - con.rollback(sp); - conControl.setVoidCallable(1); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.currentTransaction()).willReturn(tx); + given(md.supportsSavepoints()).willReturn(true); + given(con.getMetaData()).willReturn(md); + given(con.setSavepoint(ConnectionHolder.SAVEPOINT_NAME_PREFIX + 1)).willReturn(sp); final TransactionTemplate tt = new TransactionTemplate(); tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_NESTED); - dialect.beginTransaction(tx, tt); - dialectControl.setReturnValue(null, 1); ConnectionHandle conHandle = new SimpleConnectionHandle(con); - dialect.getJdbcConnection(pm, false); - dialectControl.setReturnValue(conHandle, 1); - dialect.releaseJdbcConnection(conHandle, pm); - dialectControl.setVoidCallable(1); - dialect.cleanupTransaction(null); - dialectControl.setVoidCallable(1); - if (!manualSavepoint) { - tx.isActive(); - txControl.setReturnValue(true, 1); - } - tx.getRollbackOnly(); - txControl.setReturnValue(false, 1); - tx.commit(); - txControl.setVoidCallable(1); - pmfControl.replay(); - dsControl.replay(); - dialectControl.replay(); - pmControl.replay(); - txControl.replay(); - conControl.replay(); - mdControl.replay(); - spControl.replay(); + given(dialect.getJdbcConnection(pm, false)).willReturn(conHandle); + given(tx.isActive()).willReturn(!manualSavepoint); JdoTransactionManager tm = new JdoTransactionManager(); tm.setNestedTransactionAllowed(true); @@ -1180,56 +893,38 @@ public class JdoTransactionManagerTests extends TestCase { assertTrue("Hasn't thread pm", !TransactionSynchronizationManager.hasResource(pmf)); assertTrue("Hasn't thread con", !TransactionSynchronizationManager.hasResource(ds)); - dsControl.verify(); - dialectControl.verify(); - conControl.verify(); - mdControl.verify(); - spControl.verify(); + verify(pm).flush(); + verify(pm).close(); + verify(con).setSavepoint(ConnectionHolder.SAVEPOINT_NAME_PREFIX + 1); + verify(con).rollback(sp); + verify(dialect).beginTransaction(tx, tt); + verify(dialect).releaseJdbcConnection(conHandle, pm); + verify(dialect).cleanupTransaction(null); + verify(tx).commit(); } + @Test public void testTransactionTimeoutWithJdoDialect() throws SQLException { doTestTransactionTimeoutWithJdoDialect(true); } + @Test public void testTransactionTimeoutWithJdoDialectAndPmProxy() throws SQLException { doTestTransactionTimeoutWithJdoDialect(false); } private void doTestTransactionTimeoutWithJdoDialect(final boolean exposeNativePm) throws SQLException { - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); - MockControl dialectControl = MockControl.createControl(JdoDialect.class); - final JdoDialect dialect = (JdoDialect) dialectControl.getMock(); + Query query = mock(Query.class); + final JdoDialect dialect = mock(JdoDialect.class); TransactionTemplate tt = new TransactionTemplate(); - pmf.getConnectionFactory(); - pmfControl.setReturnValue(null, 2); - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pm.currentTransaction(); - pmControl.setReturnValue(tx, 3); - dialect.beginTransaction(tx, tt); - dialectControl.setReturnValue(null, 1); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.currentTransaction()).willReturn(tx); if (!exposeNativePm) { dialect.applyQueryTimeout(query, 10); } - dialect.cleanupTransaction(null); - dialectControl.setVoidCallable(1); - pm.newQuery(TestBean.class); - pmControl.setReturnValue(query, 1); - pm.close(); - pmControl.setVoidCallable(1); - tx.getRollbackOnly(); - txControl.setReturnValue(false, 1); - tx.commit(); - txControl.setVoidCallable(1); - - pmfControl.replay(); - pmControl.replay(); - txControl.replay(); - queryControl.replay(); - dialectControl.replay(); + given(pm.newQuery(TestBean.class)).willReturn(query); JdoTransactionManager tm = new JdoTransactionManager(pmf); tm.setJdoDialect(dialect); @@ -1267,30 +962,17 @@ public class JdoTransactionManagerTests extends TestCase { assertTrue("Hasn't thread pm", !TransactionSynchronizationManager.hasResource(pmf)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); - dialectControl.verify(); - queryControl.verify(); + verify(dialect).beginTransaction(tx, tt); + verify(dialect).cleanupTransaction(null); + verify(pm).close(); + verify(tx).getRollbackOnly(); + verify(tx).commit(); } + @Test public void testTransactionFlush() { - pmf.getConnectionFactory(); - pmfControl.setReturnValue(null, 1); - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pm.currentTransaction(); - pmControl.setReturnValue(tx, 3); - pm.flush(); - pmControl.setVoidCallable(1); - pm.close(); - pmControl.setVoidCallable(1); - tx.begin(); - txControl.setVoidCallable(1); - tx.getRollbackOnly(); - txControl.setReturnValue(false, 1); - tx.commit(); - txControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); - txControl.replay(); + given(pmf.getPersistenceManager()).willReturn(pm); + given(pm.currentTransaction()).willReturn(tx); PlatformTransactionManager tm = new JdoTransactionManager(pmf); TransactionTemplate tt = new TransactionTemplate(tm); @@ -1307,6 +989,10 @@ public class JdoTransactionManagerTests extends TestCase { assertTrue("Hasn't thread pm", !TransactionSynchronizationManager.hasResource(pmf)); assertTrue("JTA synchronizations not active", !TransactionSynchronizationManager.isSynchronizationActive()); + verify(pm).flush(); + verify(pm).close(); + verify(tx).begin(); + verify(tx).commit(); } } diff --git a/spring-orm/src/test/java/org/springframework/orm/jdo/LocalPersistenceManagerFactoryTests.java b/spring-orm/src/test/java/org/springframework/orm/jdo/LocalPersistenceManagerFactoryTests.java index 1bf0d91fbb0..4b16a589caf 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jdo/LocalPersistenceManagerFactoryTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jdo/LocalPersistenceManagerFactoryTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,11 @@ package org.springframework.orm.jdo; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.Mockito.mock; + import java.io.IOException; import java.util.Map; import java.util.Properties; @@ -23,19 +28,18 @@ import java.util.Properties; import javax.jdo.JDOFatalUserException; import javax.jdo.PersistenceManagerFactory; -import junit.framework.TestCase; -import org.easymock.MockControl; - +import org.junit.Test; import org.springframework.core.io.ClassPathResource; /** * @author Juergen Hoeller + * @author Phillip Webb */ -public class LocalPersistenceManagerFactoryTests extends TestCase { +public class LocalPersistenceManagerFactoryTests { + @Test public void testLocalPersistenceManagerFactoryBean() throws IOException { - MockControl pmfControl = MockControl.createControl(PersistenceManagerFactory.class); - final PersistenceManagerFactory pmf = (PersistenceManagerFactory) pmfControl.getMock(); + final PersistenceManagerFactory pmf = mock(PersistenceManagerFactory.class); LocalPersistenceManagerFactoryBean pmfb = new LocalPersistenceManagerFactoryBean() { @Override protected PersistenceManagerFactory newPersistenceManagerFactory(Map props) { @@ -47,6 +51,7 @@ public class LocalPersistenceManagerFactoryTests extends TestCase { assertSame(pmf, pmfb.getObject()); } + @Test public void testLocalPersistenceManagerFactoryBeanWithInvalidSettings() throws IOException { LocalPersistenceManagerFactoryBean pmfb = new LocalPersistenceManagerFactoryBean(); try { @@ -58,6 +63,7 @@ public class LocalPersistenceManagerFactoryTests extends TestCase { } } + @Test public void testLocalPersistenceManagerFactoryBeanWithIncompleteProperties() throws IOException { LocalPersistenceManagerFactoryBean pmfb = new LocalPersistenceManagerFactoryBean(); Properties props = new Properties(); @@ -72,6 +78,7 @@ public class LocalPersistenceManagerFactoryTests extends TestCase { } } + @Test public void testLocalPersistenceManagerFactoryBeanWithInvalidProperty() throws IOException { LocalPersistenceManagerFactoryBean pmfb = new LocalPersistenceManagerFactoryBean() { @Override @@ -92,6 +99,7 @@ public class LocalPersistenceManagerFactoryTests extends TestCase { } } + @Test public void testLocalPersistenceManagerFactoryBeanWithFile() throws IOException { LocalPersistenceManagerFactoryBean pmfb = new LocalPersistenceManagerFactoryBean() { @Override @@ -110,6 +118,7 @@ public class LocalPersistenceManagerFactoryTests extends TestCase { } } + @Test public void testLocalPersistenceManagerFactoryBeanWithName() throws IOException { LocalPersistenceManagerFactoryBean pmfb = new LocalPersistenceManagerFactoryBean() { @Override @@ -128,6 +137,7 @@ public class LocalPersistenceManagerFactoryTests extends TestCase { } } + @Test public void testLocalPersistenceManagerFactoryBeanWithNameAndProperties() throws IOException { LocalPersistenceManagerFactoryBean pmfb = new LocalPersistenceManagerFactoryBean() { @Override diff --git a/spring-orm/src/test/java/org/springframework/orm/jdo/support/JdoDaoSupportTests.java b/spring-orm/src/test/java/org/springframework/orm/jdo/support/JdoDaoSupportTests.java index 20bc73dbfe2..529bdcabf1b 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jdo/support/JdoDaoSupportTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jdo/support/JdoDaoSupportTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,28 +16,28 @@ package org.springframework.orm.jdo.support; +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; + import java.util.ArrayList; import java.util.List; import javax.jdo.PersistenceManagerFactory; -import junit.framework.TestCase; -import org.easymock.MockControl; - +import org.junit.Test; import org.springframework.orm.jdo.JdoTemplate; /** * @author Juergen Hoeller + * @author Phillip Webb * @since 30.07.2003 */ -public class JdoDaoSupportTests extends TestCase { +public class JdoDaoSupportTests { + @Test public void testJdoDaoSupportWithPersistenceManagerFactory() throws Exception { - MockControl pmfControl = MockControl.createControl(PersistenceManagerFactory.class); - PersistenceManagerFactory pmf = (PersistenceManagerFactory) pmfControl.getMock(); + PersistenceManagerFactory pmf = mock(PersistenceManagerFactory.class); pmf.getConnectionFactory(); - pmfControl.setReturnValue(null, 1); - pmfControl.replay(); final List test = new ArrayList(); JdoDaoSupport dao = new JdoDaoSupport() { @Override @@ -50,9 +50,9 @@ public class JdoDaoSupportTests extends TestCase { assertEquals("Correct PersistenceManagerFactory", pmf, dao.getPersistenceManagerFactory()); assertEquals("Correct JdoTemplate", pmf, dao.getJdoTemplate().getPersistenceManagerFactory()); assertEquals("initDao called", test.size(), 1); - pmfControl.verify(); } + @Test public void testJdoDaoSupportWithJdoTemplate() throws Exception { JdoTemplate template = new JdoTemplate(); final List test = new ArrayList(); diff --git a/spring-orm/src/test/java/org/springframework/orm/jdo/support/OpenPersistenceManagerInViewTests.java b/spring-orm/src/test/java/org/springframework/orm/jdo/support/OpenPersistenceManagerInViewTests.java index 7a5784ac93c..2736e3b6da4 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jdo/support/OpenPersistenceManagerInViewTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jdo/support/OpenPersistenceManagerInViewTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,15 @@ package org.springframework.orm.jdo.support; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + import java.io.IOException; + import javax.jdo.PersistenceManager; import javax.jdo.PersistenceManagerFactory; import javax.servlet.FilterChain; @@ -24,9 +32,7 @@ import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; -import junit.framework.TestCase; -import org.easymock.MockControl; - +import org.junit.Test; import org.springframework.mock.web.test.MockFilterConfig; import org.springframework.mock.web.test.MockHttpServletRequest; import org.springframework.mock.web.test.MockHttpServletResponse; @@ -40,15 +46,15 @@ import org.springframework.web.context.support.StaticWebApplicationContext; /** * @author Juergen Hoeller * @author Chris Beams + * @author Phillip Webb * @since 15.06.2004 */ -public class OpenPersistenceManagerInViewTests extends TestCase { +public class OpenPersistenceManagerInViewTests { + @Test public void testOpenPersistenceManagerInViewInterceptor() throws Exception { - MockControl pmfControl = MockControl.createControl(PersistenceManagerFactory.class); - PersistenceManagerFactory pmf = (PersistenceManagerFactory) pmfControl.getMock(); - MockControl pmControl = MockControl.createControl(PersistenceManager.class); - PersistenceManager pm = (PersistenceManager) pmControl.getMock(); + PersistenceManagerFactory pmf = mock(PersistenceManagerFactory.class); + PersistenceManager pm = mock(PersistenceManager.class); OpenPersistenceManagerInViewInterceptor interceptor = new OpenPersistenceManagerInViewInterceptor(); interceptor.setPersistenceManagerFactory(pmf); @@ -56,10 +62,7 @@ public class OpenPersistenceManagerInViewTests extends TestCase { MockServletContext sc = new MockServletContext(); MockHttpServletRequest request = new MockHttpServletRequest(sc); - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pmfControl.replay(); - pmControl.replay(); + given(pmf.getPersistenceManager()).willReturn(pm); interceptor.preHandle(new ServletWebRequest(request)); assertTrue(TransactionSynchronizationManager.hasResource(pmf)); @@ -77,54 +80,23 @@ public class OpenPersistenceManagerInViewTests extends TestCase { interceptor.postHandle(new ServletWebRequest(request), null); interceptor.afterCompletion(new ServletWebRequest(request), null); - pmfControl.verify(); - pmControl.verify(); - - pmfControl.reset(); - pmControl.reset(); - pmfControl.replay(); - pmControl.replay(); interceptor.postHandle(new ServletWebRequest(request), null); assertTrue(TransactionSynchronizationManager.hasResource(pmf)); - pmfControl.verify(); - pmControl.verify(); - pmfControl.reset(); - pmControl.reset(); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); interceptor.afterCompletion(new ServletWebRequest(request), null); assertFalse(TransactionSynchronizationManager.hasResource(pmf)); - pmfControl.verify(); - pmControl.verify(); } + @Test public void testOpenPersistenceManagerInViewFilter() throws Exception { - MockControl pmfControl = MockControl.createControl(PersistenceManagerFactory.class); - final PersistenceManagerFactory pmf = (PersistenceManagerFactory) pmfControl.getMock(); - MockControl pmControl = MockControl.createControl(PersistenceManager.class); - PersistenceManager pm = (PersistenceManager) pmControl.getMock(); + final PersistenceManagerFactory pmf = mock(PersistenceManagerFactory.class); + PersistenceManager pm = mock(PersistenceManager.class); - pmf.getPersistenceManager(); - pmfControl.setReturnValue(pm, 1); - pm.close(); - pmControl.setVoidCallable(1); - pmfControl.replay(); - pmControl.replay(); + given(pmf.getPersistenceManager()).willReturn(pm); + final PersistenceManagerFactory pmf2 = mock(PersistenceManagerFactory.class); + PersistenceManager pm2 = mock(PersistenceManager.class); - MockControl pmf2Control = MockControl.createControl(PersistenceManagerFactory.class); - final PersistenceManagerFactory pmf2 = (PersistenceManagerFactory) pmf2Control.getMock(); - MockControl pm2Control = MockControl.createControl(PersistenceManager.class); - PersistenceManager pm2 = (PersistenceManager) pm2Control.getMock(); - - pmf2.getPersistenceManager(); - pmf2Control.setReturnValue(pm2, 1); - pm2.close(); - pm2Control.setVoidCallable(1); - pmf2Control.replay(); - pm2Control.replay(); + given(pmf2.getPersistenceManager()).willReturn(pm2); MockServletContext sc = new MockServletContext(); StaticWebApplicationContext wac = new StaticWebApplicationContext(); @@ -171,10 +143,8 @@ public class OpenPersistenceManagerInViewTests extends TestCase { assertFalse(TransactionSynchronizationManager.hasResource(pmf2)); assertNotNull(request.getAttribute("invoked")); - pmfControl.verify(); - pmControl.verify(); - pmf2Control.verify(); - pm2Control.verify(); + verify(pm).close(); + verify(pm2).close(); wac.close(); } diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBeanTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBeanTests.java index 80912a34798..cefae3bdf2f 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBeanTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBeanTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,13 +16,17 @@ package org.springframework.orm.jpa; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; + import javax.persistence.EntityManagerFactory; import javax.persistence.PersistenceException; import javax.persistence.spi.PersistenceUnitInfo; -import junit.framework.TestCase; -import org.easymock.MockControl; - +import org.junit.After; +import org.junit.Before; import org.springframework.transaction.support.TransactionSynchronizationManager; /** @@ -31,18 +35,23 @@ import org.springframework.transaction.support.TransactionSynchronizationManager * * @author Rod Johnson * @author Juergen Hoeller + * @author Phillip Webb */ -public abstract class AbstractEntityManagerFactoryBeanTests extends TestCase { - - protected static MockControl emfMc; +public abstract class AbstractEntityManagerFactoryBeanTests { protected static EntityManagerFactory mockEmf; + @Before + public void setUp() throws Exception { + mockEmf = mock(EntityManagerFactory.class); + } - @Override - protected void setUp() throws Exception { - emfMc = MockControl.createControl(EntityManagerFactory.class); - mockEmf = (EntityManagerFactory) emfMc.getMock(); + @After + public void tearDown() throws Exception { + assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); + assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); + assertFalse(TransactionSynchronizationManager.isCurrentTransactionReadOnly()); + assertFalse(TransactionSynchronizationManager.isActualTransactionActive()); } protected void checkInvariants(AbstractEntityManagerFactoryBean demf) { @@ -56,14 +65,6 @@ public abstract class AbstractEntityManagerFactoryBeanTests extends TestCase { assertSame(emfi.getNativeEntityManagerFactory(), mockEmf); } - @Override - protected void tearDown() throws Exception { - assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); - assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); - assertFalse(TransactionSynchronizationManager.isCurrentTransactionReadOnly()); - assertFalse(TransactionSynchronizationManager.isActualTransactionActive()); - } - protected static class DummyEntityManagerFactoryBean extends AbstractEntityManagerFactoryBean { diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/DefaultJpaDialectTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/DefaultJpaDialectTests.java index 0f7efcafe7e..9102cd8645a 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/DefaultJpaDialectTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/DefaultJpaDialectTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,35 +16,29 @@ package org.springframework.orm.jpa; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; + import javax.persistence.EntityManager; import javax.persistence.EntityTransaction; import javax.persistence.OptimisticLockException; -import junit.framework.TestCase; - -import org.easymock.MockControl; +import org.junit.Test; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionException; import org.springframework.transaction.support.DefaultTransactionDefinition; /** - * * @author Costin Leau - * + * @author Phillip Webb */ -public class DefaultJpaDialectTests extends TestCase { - JpaDialect dialect; +public class DefaultJpaDialectTests { - @Override - protected void setUp() throws Exception { - dialect = new DefaultJpaDialect(); - } - - @Override - protected void tearDown() throws Exception { - dialect = null; - } + private JpaDialect dialect = new DefaultJpaDialect(); + @Test public void testDefaultTransactionDefinition() throws Exception { DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); definition.setIsolationLevel(TransactionDefinition.ISOLATION_REPEATABLE_READ); @@ -58,26 +52,18 @@ public class DefaultJpaDialectTests extends TestCase { } } + @Test public void testDefaultBeginTransaction() throws Exception { TransactionDefinition definition = new DefaultTransactionDefinition(); - MockControl entityControl = MockControl.createControl(EntityManager.class); - EntityManager entityManager = (EntityManager) entityControl.getMock(); + EntityManager entityManager = mock(EntityManager.class); + EntityTransaction entityTx = mock(EntityTransaction.class); - MockControl txControl = MockControl.createControl(EntityTransaction.class); - EntityTransaction entityTx = (EntityTransaction) txControl.getMock(); - - entityControl.expectAndReturn(entityManager.getTransaction(), entityTx); - entityTx.begin(); - - entityControl.replay(); - txControl.replay(); + given(entityManager.getTransaction()).willReturn(entityTx); dialect.beginTransaction(entityManager, definition); - - entityControl.verify(); - txControl.verify(); } + @Test public void testTranslateException() { OptimisticLockException ex = new OptimisticLockException(); assertEquals( diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/EntityManagerFactoryBeanSupportTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/EntityManagerFactoryBeanSupportTests.java index 1d4578b372b..0f21f02ea85 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/EntityManagerFactoryBeanSupportTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/EntityManagerFactoryBeanSupportTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,19 +16,17 @@ package org.springframework.orm.jpa; +import static org.mockito.Mockito.verify; + +import org.junit.Test; + /** * @author Rod Johnson + * @author Phillip Webb */ public class EntityManagerFactoryBeanSupportTests extends AbstractEntityManagerFactoryBeanTests { - @Override - protected void setUp() throws Exception { - super.setUp(); - mockEmf.close(); - emfMc.setVoidCallable(); - emfMc.replay(); - } - + @Test public void testHookIsCalled() throws Exception { DummyEntityManagerFactoryBean demf = new DummyEntityManagerFactoryBean(mockEmf); @@ -39,7 +37,7 @@ public class EntityManagerFactoryBeanSupportTests extends AbstractEntityManagerF // Should trigger close method expected by EntityManagerFactory mock demf.destroy(); - emfMc.verify(); + verify(mockEmf).close(); } } diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/EntityManagerFactoryUtilsTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/EntityManagerFactoryUtilsTests.java index 137912e5b23..43771366636 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/EntityManagerFactoryUtilsTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/EntityManagerFactoryUtilsTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,13 @@ package org.springframework.orm.jpa; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; + import javax.persistence.EntityExistsException; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; @@ -26,9 +33,7 @@ import javax.persistence.OptimisticLockException; import javax.persistence.PersistenceException; import javax.persistence.TransactionRequiredException; -import junit.framework.TestCase; -import org.easymock.MockControl; - +import org.junit.Test; import org.springframework.dao.DataAccessException; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.dao.EmptyResultDataAccessException; @@ -40,13 +45,15 @@ import org.springframework.transaction.support.TransactionSynchronizationManager * @author Costin Leau * @author Rod Johnson * @author Juergen Hoeller + * @author Phillip Webb */ -public class EntityManagerFactoryUtilsTests extends TestCase { +public class EntityManagerFactoryUtilsTests { /* * Test method for * 'org.springframework.orm.jpa.EntityManagerFactoryUtils.doGetEntityManager(EntityManagerFactory)' */ + @Test public void testDoGetEntityManager() { // test null assertion try { @@ -56,34 +63,25 @@ public class EntityManagerFactoryUtilsTests extends TestCase { catch (IllegalArgumentException ex) { // it's okay } - MockControl mockControl = MockControl.createControl(EntityManagerFactory.class); - EntityManagerFactory factory = (EntityManagerFactory) mockControl.getMock(); + EntityManagerFactory factory = mock(EntityManagerFactory.class); - mockControl.replay(); // no tx active assertNull(EntityManagerFactoryUtils.doGetTransactionalEntityManager(factory, null)); - mockControl.verify(); - assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); } + @Test public void testDoGetEntityManagerWithTx() throws Exception { try { - MockControl mockControl = MockControl.createControl(EntityManagerFactory.class); - EntityManagerFactory factory = (EntityManagerFactory) mockControl.getMock(); - - MockControl managerControl = MockControl.createControl(EntityManager.class); - EntityManager manager = (EntityManager) managerControl.getMock(); + EntityManagerFactory factory = mock(EntityManagerFactory.class); + EntityManager manager = mock(EntityManager.class); TransactionSynchronizationManager.initSynchronization(); - mockControl.expectAndReturn(factory.createEntityManager(), manager); + given(factory.createEntityManager()).willReturn(manager); - mockControl.replay(); // no tx active assertSame(manager, EntityManagerFactoryUtils.doGetTransactionalEntityManager(factory, null)); assertSame(manager, ((EntityManagerHolder)TransactionSynchronizationManager.unbindResource(factory)).getEntityManager()); - - mockControl.verify(); } finally { TransactionSynchronizationManager.clearSynchronization(); @@ -92,6 +90,7 @@ public class EntityManagerFactoryUtilsTests extends TestCase { assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); } + @Test public void testTranslatesIllegalStateException() { IllegalStateException ise = new IllegalStateException(); DataAccessException dex = EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(ise); @@ -99,6 +98,7 @@ public class EntityManagerFactoryUtilsTests extends TestCase { assertTrue(dex instanceof InvalidDataAccessApiUsageException); } + @Test public void testTranslatesIllegalArgumentException() { IllegalArgumentException iae = new IllegalArgumentException(); DataAccessException dex = EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(iae); @@ -109,6 +109,7 @@ public class EntityManagerFactoryUtilsTests extends TestCase { /** * We do not convert unknown exceptions. They may result from user code. */ + @Test public void testDoesNotTranslateUnfamiliarException() { UnsupportedOperationException userRuntimeException = new UnsupportedOperationException(); assertNull( @@ -120,6 +121,7 @@ public class EntityManagerFactoryUtilsTests extends TestCase { * Test method for * 'org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessException(PersistenceException)' */ + @Test @SuppressWarnings("serial") public void testConvertJpaPersistenceException() { EntityNotFoundException entityNotFound = new EntityNotFoundException(); diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/JpaInterceptorTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/JpaInterceptorTests.java index 5f2c0d0aa91..acc8f3b5559 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/JpaInterceptorTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/JpaInterceptorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,59 +16,57 @@ package org.springframework.orm.jpa; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willThrow; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + import java.lang.reflect.AccessibleObject; import java.lang.reflect.Method; + import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.PersistenceException; -import junit.framework.TestCase; import org.aopalliance.intercept.Interceptor; import org.aopalliance.intercept.Invocation; import org.aopalliance.intercept.MethodInvocation; -import org.easymock.MockControl; - +import org.junit.After; +import org.junit.Before; +import org.junit.Test; import org.springframework.transaction.support.TransactionSynchronizationManager; /** * @author Costin Leau + * @author Phillip Webb */ -public class JpaInterceptorTests extends TestCase { - - private MockControl factoryControl, managerControl; +public class JpaInterceptorTests { private EntityManagerFactory factory; private EntityManager entityManager; - @Override - protected void setUp() throws Exception { - factoryControl = MockControl.createControl(EntityManagerFactory.class); - factory = (EntityManagerFactory) factoryControl.getMock(); - managerControl = MockControl.createControl(EntityManager.class); - entityManager = (EntityManager) managerControl.getMock(); + @Before + public void setUp() throws Exception { + factory = mock(EntityManagerFactory.class); + entityManager = mock(EntityManager.class); } - @Override - protected void tearDown() throws Exception { + @After + public void tearDown() throws Exception { assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); - - factoryControl = null; - factory = null; - managerControl = null; - entityManager = null; - } + @Test public void testInterceptorWithNewEntityManager() throws PersistenceException { - factoryControl.expectAndReturn(factory.createEntityManager(), entityManager); - managerControl.expectAndReturn(entityManager.isOpen(), true); - entityManager.close(); - - factoryControl.replay(); - managerControl.replay(); + given(factory.createEntityManager()).willReturn(entityManager); + given(entityManager.isOpen()).willReturn(true); JpaInterceptor interceptor = new JpaInterceptor(); interceptor.setEntityManagerFactory(factory); @@ -79,17 +77,13 @@ public class JpaInterceptorTests extends TestCase { fail("Should not have thrown Throwable: " + t.getMessage()); } - factoryControl.verify(); - managerControl.verify(); + verify(entityManager).close(); } + @Test public void testInterceptorWithNewEntityManagerAndLazyFlush() throws PersistenceException { - factoryControl.expectAndReturn(factory.createEntityManager(), entityManager); - managerControl.expectAndReturn(entityManager.isOpen(), true); - entityManager.close(); - - factoryControl.replay(); - managerControl.replay(); + given(factory.createEntityManager()).willReturn(entityManager); + given(entityManager.isOpen()).willReturn(true); JpaInterceptor interceptor = new JpaInterceptor(); interceptor.setFlushEager(false); @@ -101,14 +95,11 @@ public class JpaInterceptorTests extends TestCase { fail("Should not have thrown Throwable: " + t.getMessage()); } - factoryControl.verify(); - managerControl.verify(); + verify(entityManager).close(); } + @Test public void testInterceptorWithThreadBound() { - factoryControl.replay(); - managerControl.replay(); - TransactionSynchronizationManager.bindResource(factory, new EntityManagerHolder(entityManager)); JpaInterceptor interceptor = new JpaInterceptor(); interceptor.setEntityManagerFactory(factory); @@ -121,18 +112,10 @@ public class JpaInterceptorTests extends TestCase { finally { TransactionSynchronizationManager.unbindResource(factory); } - - factoryControl.verify(); - managerControl.verify(); } + @Test public void testInterceptorWithThreadBoundAndFlushEager() throws PersistenceException { - //entityManager.setFlushMode(FlushModeType.AUTO); - entityManager.flush(); - - factoryControl.replay(); - managerControl.replay(); - TransactionSynchronizationManager.bindResource(factory, new EntityManagerHolder(entityManager)); JpaInterceptor interceptor = new JpaInterceptor(); interceptor.setFlushEager(true); @@ -147,17 +130,11 @@ public class JpaInterceptorTests extends TestCase { TransactionSynchronizationManager.unbindResource(factory); } - factoryControl.verify(); - managerControl.verify(); + verify(entityManager).flush(); } + @Test public void testInterceptorWithThreadBoundAndFlushCommit() { - //entityManager.setFlushMode(FlushModeType.COMMIT); - //entityManager.flush(); - - factoryControl.replay(); - managerControl.replay(); - TransactionSynchronizationManager.bindResource(factory, new EntityManagerHolder(entityManager)); JpaInterceptor interceptor = new JpaInterceptor(); interceptor.setFlushEager(false); @@ -171,22 +148,15 @@ public class JpaInterceptorTests extends TestCase { finally { TransactionSynchronizationManager.unbindResource(factory); } - - factoryControl.verify(); - managerControl.verify(); } + @Test public void testInterceptorWithFlushFailure() throws Throwable { - factoryControl.expectAndReturn(factory.createEntityManager(), entityManager); - entityManager.flush(); + given(factory.createEntityManager()).willReturn(entityManager); PersistenceException exception = new PersistenceException(); - managerControl.setThrowable(exception, 1); - managerControl.expectAndReturn(entityManager.isOpen(), true); - entityManager.close(); - - factoryControl.replay(); - managerControl.replay(); + willThrow(exception).given(entityManager).flush(); + given(entityManager.isOpen()).willReturn(true); JpaInterceptor interceptor = new JpaInterceptor(); interceptor.setFlushEager(true); @@ -200,21 +170,16 @@ public class JpaInterceptorTests extends TestCase { assertEquals(exception, ex.getCause()); } - factoryControl.verify(); - managerControl.verify(); + verify(entityManager).close(); } + @Test public void testInterceptorWithFlushFailureWithoutConversion() throws Throwable { - factoryControl.expectAndReturn(factory.createEntityManager(), entityManager); - entityManager.flush(); + given(factory.createEntityManager()).willReturn(entityManager); PersistenceException exception = new PersistenceException(); - managerControl.setThrowable(exception, 1); - managerControl.expectAndReturn(entityManager.isOpen(), true); - entityManager.close(); - - factoryControl.replay(); - managerControl.replay(); + willThrow(exception).given(entityManager).flush(); + given(entityManager.isOpen()).willReturn(true); JpaInterceptor interceptor = new JpaInterceptor(); interceptor.setFlushEager(true); @@ -229,8 +194,7 @@ public class JpaInterceptorTests extends TestCase { assertEquals(exception, ex); } - factoryControl.verify(); - managerControl.verify(); + verify(entityManager).close(); } diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/JpaTemplateTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/JpaTemplateTests.java index 4d25da36591..64828a43190 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/JpaTemplateTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/JpaTemplateTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,61 +16,58 @@ package org.springframework.orm.jpa; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotSame; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.fail; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; + import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.PersistenceException; import javax.persistence.Query; -import junit.framework.TestCase; -import org.easymock.MockControl; - +import org.junit.Before; +import org.junit.Test; import org.springframework.dao.DataAccessException; import org.springframework.transaction.support.TransactionSynchronizationManager; /** * @author Costin Leau + * @author Phillip Webb */ -public class JpaTemplateTests extends TestCase { +public class JpaTemplateTests { private JpaTemplate template; - private MockControl factoryControl, managerControl; - private EntityManager manager; private EntityManagerFactory factory; - @Override - protected void setUp() throws Exception { + @Before + public void setUp() throws Exception { template = new JpaTemplate(); - factoryControl = MockControl.createControl(EntityManagerFactory.class); - factory = (EntityManagerFactory) factoryControl.getMock(); - managerControl = MockControl.createControl(EntityManager.class); - manager = (EntityManager) managerControl.getMock(); + factory = mock(EntityManagerFactory.class); + manager = mock(EntityManager.class); template.setEntityManager(manager); template.afterPropertiesSet(); } - @Override - protected void tearDown() throws Exception { - template = null; - factoryControl = null; - managerControl = null; - manager = null; - factory = null; - } - /* * Test method for * 'org.springframework.orm.jpa.JpaTemplate.JpaTemplate(EntityManagerFactory)' */ + @Test public void testJpaTemplateEntityManagerFactory() { } @@ -79,6 +76,7 @@ public class JpaTemplateTests extends TestCase { * Test method for * 'org.springframework.orm.jpa.JpaTemplate.JpaTemplate(EntityManager)' */ + @Test public void testJpaTemplateEntityManager() { } @@ -87,14 +85,12 @@ public class JpaTemplateTests extends TestCase { * Test method for * 'org.springframework.orm.jpa.JpaTemplate.execute(JpaCallback)' */ + @Test public void testExecuteJpaCallback() { template.setExposeNativeEntityManager(true); template.setEntityManager(manager); template.afterPropertiesSet(); - managerControl.replay(); - factoryControl.replay(); - template.execute(new JpaCallback() { @Override @@ -113,22 +109,18 @@ public class JpaTemplateTests extends TestCase { return null; } }); - managerControl.verify(); - factoryControl.verify(); } /* * Test method for * 'org.springframework.orm.jpa.JpaTemplate.executeFind(JpaCallback)' */ + @Test public void testExecuteFind() { template.setEntityManager(manager); template.setExposeNativeEntityManager(true); template.afterPropertiesSet(); - managerControl.replay(); - factoryControl.replay(); - try { template.executeFind(new JpaCallback() { @@ -143,28 +135,23 @@ public class JpaTemplateTests extends TestCase { catch (DataAccessException e) { // expected } - - managerControl.verify(); - factoryControl.verify(); } /* * Test method for * 'org.springframework.orm.jpa.JpaTemplate.execute(JpaCallback, boolean)' */ + @Test public void testExecuteJpaCallbackBoolean() { template = new JpaTemplate(); template.setExposeNativeEntityManager(false); template.setEntityManagerFactory(factory); template.afterPropertiesSet(); - factoryControl.expectAndReturn(factory.createEntityManager(), manager); - managerControl.expectAndReturn(manager.isOpen(), true); + given(factory.createEntityManager()).willReturn(manager); + given(manager.isOpen()).willReturn(true); manager.close(); - managerControl.replay(); - factoryControl.replay(); - template.execute(new JpaCallback() { @Override public Object doInJpa(EntityManager em) throws PersistenceException { @@ -172,19 +159,15 @@ public class JpaTemplateTests extends TestCase { return null; } }, true); - - managerControl.verify(); - factoryControl.verify(); } + @Test public void testExecuteJpaCallbackBooleanWithPrebound() { template.setExposeNativeEntityManager(false); template.setEntityManagerFactory(factory); template.afterPropertiesSet(); TransactionSynchronizationManager.bindResource(factory, new EntityManagerHolder(manager)); - managerControl.replay(); - factoryControl.replay(); try { template.execute(new JpaCallback() { @@ -195,9 +178,6 @@ public class JpaTemplateTests extends TestCase { return null; } }, true); - - managerControl.verify(); - factoryControl.verify(); } finally { TransactionSynchronizationManager.unbindResource(factory); @@ -208,9 +188,8 @@ public class JpaTemplateTests extends TestCase { * Test method for * 'org.springframework.orm.jpa.JpaTemplate.createSharedEntityManager(EntityManager)' */ + @Test public void testCreateEntityManagerProxy() { - manager.clear(); - managerControl.replay(); EntityManager proxy = template.createEntityManagerProxy(manager); assertNotSame(manager, proxy); @@ -220,24 +199,20 @@ public class JpaTemplateTests extends TestCase { proxy.close(); proxy.clear(); - managerControl.verify(); + verify(manager).clear(); } /* * Test method for 'org.springframework.orm.jpa.JpaTemplate.find(Class, * Object) ' */ + @Test public void testFindClassOfTObject() { Integer result = new Integer(1); Object id = new Object(); - managerControl.expectAndReturn(manager.find(Number.class, id), result); - managerControl.replay(); - factoryControl.replay(); + given(manager.find(Number.class, id)).willReturn(result); assertSame(result, template.find(Number.class, id)); - - managerControl.verify(); - factoryControl.verify(); } /* @@ -245,172 +220,122 @@ public class JpaTemplateTests extends TestCase { * 'org.springframework.orm.jpa.JpaTemplate.getReference(Class, Object) * ' */ + @Test public void testGetReference() { Integer reference = new Integer(1); Object id = new Object(); - managerControl.expectAndReturn(manager.getReference(Number.class, id), reference); - managerControl.replay(); - factoryControl.replay(); + given(manager.getReference(Number.class, id)).willReturn(reference); assertSame(reference, template.getReference(Number.class, id)); - - managerControl.verify(); - factoryControl.verify(); } /* * Test method for * 'org.springframework.orm.jpa.JpaTemplate.contains(Object)' */ + @Test public void testContains() { boolean result = true; Object entity = new Object(); - managerControl.expectAndReturn(manager.contains(entity), result); - managerControl.replay(); - factoryControl.replay(); + given(manager.contains(entity)).willReturn(result); assertSame(result, template.contains(entity)); - - managerControl.verify(); - factoryControl.verify(); } /* * Test method for 'org.springframework.orm.jpa.JpaTemplate.refresh(Object)' */ + @Test public void testRefresh() { Object entity = new Object(); - manager.refresh(entity); - managerControl.replay(); - factoryControl.replay(); - template.refresh(entity); - - managerControl.verify(); - factoryControl.verify(); + verify(manager).refresh(entity); } /* * Test method for 'org.springframework.orm.jpa.JpaTemplate.persist(Object)' */ + @Test public void testPersist() { Object entity = new Object(); - manager.persist(entity); - managerControl.replay(); - factoryControl.replay(); - template.persist(entity); - - managerControl.verify(); - factoryControl.verify(); + verify(manager).persist(entity); } /* * Test method for 'org.springframework.orm.jpa.JpaTemplate.merge(T) ' */ + @Test public void testMerge() { Object result = new Object(); Object entity = new Object(); - managerControl.expectAndReturn(manager.merge(entity), result); - managerControl.replay(); - factoryControl.replay(); - + given(manager.merge(entity)).willReturn(result); assertSame(result, template.merge(entity)); - - managerControl.verify(); - factoryControl.verify(); } /* * Test method for 'org.springframework.orm.jpa.JpaTemplate.remove(Object)' */ + @Test public void testRemove() { Object entity = new Object(); - manager.remove(entity); - managerControl.replay(); - factoryControl.replay(); - template.remove(entity); - - managerControl.verify(); - factoryControl.verify(); + verify(manager).remove(entity); } /* * Test method for 'org.springframework.orm.jpa.JpaTemplate.flush()' */ + @Test public void testFlush() { - manager.flush(); - managerControl.replay(); - factoryControl.replay(); - template.flush(); - - managerControl.verify(); - factoryControl.verify(); + verify(manager).flush(); } /* * Test method for 'org.springframework.orm.jpa.JpaTemplate.find(String)' */ + @Test public void testFindString() { String queryString = "some query"; - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); + Query query = mock(Query.class); List result = new ArrayList(); - managerControl.expectAndReturn(manager.createQuery(queryString), query); - queryControl.expectAndReturn(query.getResultList(), result); - - managerControl.replay(); - factoryControl.replay(); - queryControl.replay(); - + given(manager.createQuery(queryString)).willReturn(query); + given(query.getResultList()).willReturn(result); assertSame(result, template.find(queryString)); - - managerControl.verify(); - factoryControl.verify(); - queryControl.verify(); } /* * Test method for 'org.springframework.orm.jpa.JpaTemplate.find(String, * Object...)' */ + @Test public void testFindStringObjectArray() { String queryString = "some query"; - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); + Query query = mock(Query.class); List result = new ArrayList(); Object param1 = new Object(); Object param2 = new Object(); Object[] params = new Object[] { param1, param2 }; - managerControl.expectAndReturn(manager.createQuery(queryString), query); - queryControl.expectAndReturn(query.setParameter(1, param1), null); - queryControl.expectAndReturn(query.setParameter(2, param2), null); - - queryControl.expectAndReturn(query.getResultList(), result); - - managerControl.replay(); - factoryControl.replay(); - queryControl.replay(); + given(manager.createQuery(queryString)).willReturn(query); + given(query.getResultList()).willReturn(result); assertSame(result, template.find(queryString, params)); - managerControl.verify(); - factoryControl.verify(); - queryControl.verify(); + verify(query).setParameter(1, param1); + verify(query).setParameter(2, param2); } /* * Test method for 'org.springframework.orm.jpa.JpaTemplate.find(String, Map)' */ + @Test public void testFindStringMapOfStringObject() { String queryString = "some query"; - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); + Query query = mock(Query.class); List result = new ArrayList(); Object param1 = new Object(); Object param2 = new Object(); @@ -418,46 +343,29 @@ public class JpaTemplateTests extends TestCase { params.put("param1", param1); params.put("param2", param2); - managerControl.expectAndReturn(manager.createQuery(queryString), query); - queryControl.expectAndReturn(query.setParameter("param1", param1), null); - queryControl.expectAndReturn(query.setParameter("param2", param2), null); - - queryControl.expectAndReturn(query.getResultList(), result); - - managerControl.replay(); - factoryControl.replay(); - queryControl.replay(); + given(manager.createQuery(queryString)).willReturn(query); + given(query.getResultList()).willReturn(result); assertSame(result, template.findByNamedParams(queryString, params)); - managerControl.verify(); - factoryControl.verify(); - queryControl.verify(); + verify(query).setParameter("param1", param1); + verify(query).setParameter("param2", param2); } /* * Test method for * 'org.springframework.orm.jpa.JpaTemplate.findByNamedQuery(String)' */ + @Test public void testFindByNamedQueryString() { String queryName = "some query name"; - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); + Query query = mock(Query.class); List result = new ArrayList(); - managerControl.expectAndReturn(manager.createNamedQuery(queryName), query); - - queryControl.expectAndReturn(query.getResultList(), result); - - managerControl.replay(); - factoryControl.replay(); - queryControl.replay(); + given(manager.createNamedQuery(queryName)).willReturn(query); + given(query.getResultList()).willReturn(result); assertSame(result, template.findByNamedQuery(queryName)); - - managerControl.verify(); - factoryControl.verify(); - queryControl.verify(); } /* @@ -465,30 +373,22 @@ public class JpaTemplateTests extends TestCase { * 'org.springframework.orm.jpa.JpaTemplate.findByNamedQuery(String, * Object...)' */ + @Test public void testFindByNamedQueryStringObjectArray() { String queryName = "some query name"; - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); + Query query = mock(Query.class); List result = new ArrayList(); Object param1 = new Object(); Object param2 = new Object(); Object[] params = new Object[] { param1, param2 }; - managerControl.expectAndReturn(manager.createNamedQuery(queryName), query); - queryControl.expectAndReturn(query.setParameter(1, param1), null); - queryControl.expectAndReturn(query.setParameter(2, param2), null); - - queryControl.expectAndReturn(query.getResultList(), result); - - managerControl.replay(); - factoryControl.replay(); - queryControl.replay(); + given(manager.createNamedQuery(queryName)).willReturn(query); + given(query.getResultList()).willReturn(result); assertSame(result, template.findByNamedQuery(queryName, params)); - managerControl.verify(); - factoryControl.verify(); - queryControl.verify(); + verify(query).setParameter(1, param1); + verify(query).setParameter(2, param2); } /* @@ -496,10 +396,10 @@ public class JpaTemplateTests extends TestCase { * 'org.springframework.orm.jpa.JpaTemplate.findByNamedQuery(String, Map)' */ + @Test public void testFindByNamedQueryStringMapOfStringObject() { String queryName = "some query name"; - MockControl queryControl = MockControl.createControl(Query.class); - Query query = (Query) queryControl.getMock(); + Query query = mock(Query.class); List result = new ArrayList(); Object param1 = new Object(); Object param2 = new Object(); @@ -507,21 +407,11 @@ public class JpaTemplateTests extends TestCase { params.put("param1", param1); params.put("param2", param2); - managerControl.expectAndReturn(manager.createNamedQuery(queryName), query); - queryControl.expectAndReturn(query.setParameter("param1", param1), null); - queryControl.expectAndReturn(query.setParameter("param2", param2), null); - - queryControl.expectAndReturn(query.getResultList(), result); - - managerControl.replay(); - factoryControl.replay(); - queryControl.replay(); + given(manager.createNamedQuery(queryName)).willReturn(query); + given(query.getResultList()).willReturn(result); assertSame(result, template.findByNamedQueryAndNamedParams(queryName, params)); - - managerControl.verify(); - factoryControl.verify(); - queryControl.verify(); + verify(query).setParameter("param1", param1); + verify(query).setParameter("param2", param2); } - } diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/JpaTransactionManagerTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/JpaTransactionManagerTests.java index a1a7db067b6..a343d215372 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/JpaTransactionManagerTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/JpaTransactionManagerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,9 +16,21 @@ package org.springframework.orm.jpa; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willThrow; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + import java.sql.SQLException; import java.util.ArrayList; import java.util.List; + import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; @@ -26,9 +38,9 @@ import javax.persistence.PersistenceException; import javax.persistence.RollbackException; import javax.sql.DataSource; -import junit.framework.TestCase; -import org.easymock.MockControl; - +import org.junit.After; +import org.junit.Before; +import org.junit.Test; import org.springframework.transaction.InvalidIsolationLevelException; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; @@ -42,10 +54,9 @@ import org.springframework.transaction.support.TransactionTemplate; /** * @author Costin Leau * @author Juergen Hoeller + * @author Phillip Webb */ -public class JpaTransactionManagerTests extends TestCase { - - private MockControl factoryControl, managerControl, txControl; +public class JpaTransactionManagerTests { private EntityManager manager; @@ -60,46 +71,33 @@ public class JpaTransactionManagerTests extends TestCase { private TransactionTemplate tt; - @Override - protected void setUp() throws Exception { - factoryControl = MockControl.createControl(EntityManagerFactory.class); - factory = (EntityManagerFactory) factoryControl.getMock(); - managerControl = MockControl.createControl(EntityManager.class); - manager = (EntityManager) managerControl.getMock(); - txControl = MockControl.createControl(EntityTransaction.class); - tx = (EntityTransaction) txControl.getMock(); + @Before + public void setUp() throws Exception { + factory = mock(EntityManagerFactory.class); + manager = mock(EntityManager.class); + tx = mock(EntityTransaction.class); transactionManager = new JpaTransactionManager(factory); template = new JpaTemplate(factory); template.afterPropertiesSet(); tt = new TransactionTemplate(transactionManager); - factoryControl.expectAndReturn(factory.createEntityManager(), manager); - managerControl.expectAndReturn(manager.getTransaction(), tx); - tx.begin(); - managerControl.expectAndReturn(manager.isOpen(), true); - manager.close(); + given(factory.createEntityManager()).willReturn(manager); + given(manager.getTransaction()).willReturn(tx); + given(manager.isOpen()).willReturn(true); } - @Override - protected void tearDown() throws Exception { + @After + public void tearDown() throws Exception { assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); assertFalse(TransactionSynchronizationManager.isCurrentTransactionReadOnly()); assertFalse(TransactionSynchronizationManager.isActualTransactionActive()); } - + @Test public void testTransactionCommit() { - managerControl.expectAndReturn(manager.getTransaction(), tx); - txControl.expectAndReturn(tx.getRollbackOnly(), false); - managerControl.expectAndReturn(manager.getTransaction(), tx); - tx.commit(); - manager.flush(); - - factoryControl.replay(); - managerControl.replay(); - txControl.replay(); + given(manager.getTransaction()).willReturn(tx); final List l = new ArrayList(); l.add("test"); @@ -125,22 +123,16 @@ public class JpaTransactionManagerTests extends TestCase { assertTrue(!TransactionSynchronizationManager.hasResource(factory)); assertTrue(!TransactionSynchronizationManager.isSynchronizationActive()); - factoryControl.verify(); - managerControl.verify(); - txControl.verify(); + verify(tx).commit(); + verify(manager).flush(); + verify(manager).close(); } + @Test public void testTransactionCommitWithRollbackException() { - managerControl.expectAndReturn(manager.getTransaction(), tx); - txControl.expectAndReturn(tx.getRollbackOnly(), true); - managerControl.expectAndReturn(manager.getTransaction(), tx); - tx.commit(); - txControl.setThrowable(new RollbackException()); - manager.flush(); - - factoryControl.replay(); - managerControl.replay(); - txControl.replay(); + given(manager.getTransaction()).willReturn(tx); + given(tx.getRollbackOnly()).willReturn(true); + willThrow(new RollbackException()).given(tx).commit(); final List l = new ArrayList(); l.add("test"); @@ -172,19 +164,14 @@ public class JpaTransactionManagerTests extends TestCase { assertTrue(!TransactionSynchronizationManager.hasResource(factory)); assertTrue(!TransactionSynchronizationManager.isSynchronizationActive()); - factoryControl.verify(); - managerControl.verify(); - txControl.verify(); + verify(manager).flush(); + verify(manager).close(); } + @Test public void testTransactionRollback() { - managerControl.expectAndReturn(manager.getTransaction(), tx); - txControl.expectAndReturn(tx.isActive(), true); - tx.rollback(); - - factoryControl.replay(); - managerControl.replay(); - txControl.replay(); + given(manager.getTransaction()).willReturn(tx); + given(tx.isActive()).willReturn(true); final List l = new ArrayList(); l.add("test"); @@ -215,19 +202,13 @@ public class JpaTransactionManagerTests extends TestCase { assertTrue(!TransactionSynchronizationManager.hasResource(factory)); assertTrue(!TransactionSynchronizationManager.isSynchronizationActive()); - factoryControl.verify(); - managerControl.verify(); - txControl.verify(); + verify(tx).rollback(); + verify(manager).close(); } + @Test public void testTransactionRollbackWithAlreadyRolledBack() { - managerControl.expectAndReturn(manager.getTransaction(), tx); - txControl.expectAndReturn(tx.isActive(), false); - // tx.rollback(); - - factoryControl.replay(); - managerControl.replay(); - txControl.replay(); + given(manager.getTransaction()).willReturn(tx); final List l = new ArrayList(); l.add("test"); @@ -257,20 +238,13 @@ public class JpaTransactionManagerTests extends TestCase { assertTrue(!TransactionSynchronizationManager.hasResource(factory)); assertTrue(!TransactionSynchronizationManager.isSynchronizationActive()); - factoryControl.verify(); - managerControl.verify(); - txControl.verify(); + verify(manager).close(); } + @Test public void testTransactionRollbackOnly() { - managerControl.expectAndReturn(manager.getTransaction(), tx); - txControl.expectAndReturn(tx.isActive(), true); - manager.flush(); - tx.rollback(); - - factoryControl.replay(); - managerControl.replay(); - txControl.replay(); + given(manager.getTransaction()).willReturn(tx); + given(tx.isActive()).willReturn(true); final List l = new ArrayList(); l.add("test"); @@ -299,18 +273,14 @@ public class JpaTransactionManagerTests extends TestCase { assertTrue(!TransactionSynchronizationManager.hasResource(factory)); assertTrue(!TransactionSynchronizationManager.isSynchronizationActive()); - factoryControl.verify(); - managerControl.verify(); - txControl.verify(); + verify(manager).flush(); + verify(tx).rollback(); + verify(manager).close(); } + @Test public void testParticipatingTransactionWithCommit() { - managerControl.expectAndReturn(manager.getTransaction(), tx, 2); - manager.flush(); - - factoryControl.replay(); - managerControl.replay(); - txControl.replay(); + given(manager.getTransaction()).willReturn(tx); final List l = new ArrayList(); l.add("test"); @@ -321,11 +291,6 @@ public class JpaTransactionManagerTests extends TestCase { tt.execute(new TransactionCallback() { @Override public Object doInTransaction(TransactionStatus status) { - txControl.reset(); - txControl.expectAndReturn(tx.getRollbackOnly(), false); - tx.commit(); - txControl.replay(); - assertTrue(TransactionSynchronizationManager.hasResource(factory)); return tt.execute(new TransactionCallback() { @@ -347,16 +312,15 @@ public class JpaTransactionManagerTests extends TestCase { assertTrue(!TransactionSynchronizationManager.hasResource(factory)); assertTrue(!TransactionSynchronizationManager.isSynchronizationActive()); - factoryControl.verify(); - managerControl.verify(); - txControl.verify(); + verify(manager).flush(); + verify(tx).commit(); + verify(manager).close(); } + @Test public void testParticipatingTransactionWithRollback() { - managerControl.expectAndReturn(manager.getTransaction(), tx, 2); - factoryControl.replay(); - managerControl.replay(); - txControl.replay(); + given(manager.getTransaction()).willReturn(tx); + given(tx.isActive()).willReturn(true); final List l = new ArrayList(); l.add("test"); @@ -368,12 +332,6 @@ public class JpaTransactionManagerTests extends TestCase { tt.execute(new TransactionCallback() { @Override public Object doInTransaction(TransactionStatus status) { - txControl.reset(); - txControl.expectAndReturn(tx.isActive(), true, 2); - tx.setRollbackOnly(); - tx.rollback(); - txControl.replay(); - assertTrue(TransactionSynchronizationManager.hasResource(factory)); return tt.execute(new TransactionCallback() { @Override @@ -397,18 +355,17 @@ public class JpaTransactionManagerTests extends TestCase { assertTrue(!TransactionSynchronizationManager.hasResource(factory)); assertTrue(!TransactionSynchronizationManager.isSynchronizationActive()); - factoryControl.verify(); - managerControl.verify(); - txControl.verify(); + verify(tx).setRollbackOnly(); + verify(tx).rollback(); + verify(manager).close(); } + @Test public void testParticipatingTransactionWithRollbackOnly() { - managerControl.expectAndReturn(manager.getTransaction(), tx, 3); - manager.flush(); - - factoryControl.replay(); - managerControl.replay(); - txControl.replay(); + given(manager.getTransaction()).willReturn(tx); + given(tx.isActive()).willReturn(true); + given(tx.getRollbackOnly()).willReturn(true); + willThrow(new RollbackException()).given(tx).commit(); final List l = new ArrayList(); l.add("test"); @@ -420,14 +377,6 @@ public class JpaTransactionManagerTests extends TestCase { tt.execute(new TransactionCallback() { @Override public Object doInTransaction(TransactionStatus status) { - txControl.reset(); - txControl.expectAndReturn(tx.isActive(), true); - tx.setRollbackOnly(); - txControl.expectAndReturn(tx.getRollbackOnly(), true); - tx.commit(); - txControl.setThrowable(new RollbackException()); - txControl.replay(); - assertTrue(TransactionSynchronizationManager.hasResource(factory)); return tt.execute(new TransactionCallback() { @@ -458,23 +407,18 @@ public class JpaTransactionManagerTests extends TestCase { assertTrue(!TransactionSynchronizationManager.hasResource(factory)); assertTrue(!TransactionSynchronizationManager.isSynchronizationActive()); - factoryControl.verify(); - managerControl.verify(); - txControl.verify(); + verify(manager).flush(); + verify(tx).setRollbackOnly(); + verify(manager).close(); } + @Test public void testParticipatingTransactionWithRequiresNew() { tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); - factoryControl.expectAndReturn(factory.createEntityManager(), manager); - managerControl.expectAndReturn(manager.getTransaction(), tx, 5); - manager.flush(); - managerControl.expectAndReturn(manager.isOpen(), true); - manager.close(); - - factoryControl.replay(); - managerControl.replay(); - txControl.replay(); + given(factory.createEntityManager()).willReturn(manager); + given(manager.getTransaction()).willReturn(tx); + given(manager.isOpen()).willReturn(true); final List l = new ArrayList(); l.add("test"); @@ -485,17 +429,6 @@ public class JpaTransactionManagerTests extends TestCase { Object result = tt.execute(new TransactionCallback() { @Override public Object doInTransaction(TransactionStatus status) { - txControl.verify(); - txControl.reset(); - - tx.begin(); - txControl.expectAndReturn(tx.getRollbackOnly(), false); - tx.commit(); - txControl.expectAndReturn(tx.getRollbackOnly(), false); - tx.commit(); - - txControl.replay(); - assertTrue(TransactionSynchronizationManager.hasResource(factory)); return tt.execute(new TransactionCallback() { @Override @@ -516,20 +449,16 @@ public class JpaTransactionManagerTests extends TestCase { assertTrue(!TransactionSynchronizationManager.hasResource(factory)); assertTrue(!TransactionSynchronizationManager.isSynchronizationActive()); - factoryControl.verify(); - managerControl.verify(); - txControl.verify(); + verify(manager).flush(); + verify(manager, times(2)).close(); + verify(tx, times(2)).begin(); } + @Test public void testParticipatingTransactionWithRequiresNewAndPrebound() { tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); - managerControl.expectAndReturn(manager.getTransaction(), tx, 5); - manager.flush(); - - factoryControl.replay(); - managerControl.replay(); - txControl.replay(); + given(manager.getTransaction()).willReturn(tx); final List l = new ArrayList(); l.add("test"); @@ -543,17 +472,6 @@ public class JpaTransactionManagerTests extends TestCase { Object result = tt.execute(new TransactionCallback() { @Override public Object doInTransaction(TransactionStatus status) { - txControl.verify(); - txControl.reset(); - - tx.begin(); - txControl.expectAndReturn(tx.getRollbackOnly(), false); - tx.commit(); - txControl.expectAndReturn(tx.getRollbackOnly(), false); - tx.commit(); - - txControl.replay(); - JpaTemplate template2 = new JpaTemplate(factory); template2.execute(new JpaCallback() { @Override @@ -586,22 +504,17 @@ public class JpaTransactionManagerTests extends TestCase { assertTrue(!TransactionSynchronizationManager.hasResource(factory)); assertTrue(!TransactionSynchronizationManager.isSynchronizationActive()); - factoryControl.verify(); - managerControl.verify(); - txControl.verify(); + verify(tx, times(2)).begin(); + verify(tx, times(2)).commit(); + verify(manager).flush(); + verify(manager).close(); } + @Test public void testPropagationSupportsAndRequiresNew() { tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_SUPPORTS); - manager.flush(); - managerControl.expectAndReturn(manager.getTransaction(), tx, 2); - txControl.expectAndReturn(tx.getRollbackOnly(), false); - tx.commit(); - - factoryControl.replay(); - managerControl.replay(); - txControl.replay(); + given(manager.getTransaction()).willReturn(tx); final List l = new ArrayList(); l.add("test"); @@ -634,25 +547,18 @@ public class JpaTransactionManagerTests extends TestCase { assertTrue(!TransactionSynchronizationManager.hasResource(factory)); assertTrue(!TransactionSynchronizationManager.isSynchronizationActive()); - factoryControl.verify(); - managerControl.verify(); - txControl.verify(); + verify(tx).commit(); + verify(manager).flush(); + verify(manager).close(); } + @Test public void testPropagationSupportsAndRequiresNewAndEarlyAccess() { tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_SUPPORTS); - factoryControl.expectAndReturn(factory.createEntityManager(), manager); - managerControl.expectAndReturn(manager.getTransaction(), tx, 2); - manager.flush(); - managerControl.expectAndReturn(manager.isOpen(), true); - manager.close(); - txControl.expectAndReturn(tx.getRollbackOnly(), false); - tx.commit(); - - factoryControl.replay(); - managerControl.replay(); - txControl.replay(); + given(factory.createEntityManager()).willReturn(manager); + given(manager.getTransaction()).willReturn(tx); + given(manager.isOpen()).willReturn(true); final List l = new ArrayList(); l.add("test"); @@ -693,37 +599,22 @@ public class JpaTransactionManagerTests extends TestCase { assertTrue(!TransactionSynchronizationManager.hasResource(factory)); assertTrue(!TransactionSynchronizationManager.isSynchronizationActive()); - factoryControl.verify(); - managerControl.verify(); - txControl.verify(); + verify(tx).commit(); + verify(manager).flush(); + verify(manager, times(2)).close(); } + @Test public void testTransactionWithRequiresNewInAfterCompletion() { tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); - MockControl managerControl2 = MockControl.createControl(EntityManager.class); - EntityManager manager2 = (EntityManager) managerControl2.getMock(); - MockControl txControl2 = MockControl.createControl(EntityTransaction.class); - EntityTransaction tx2 = (EntityTransaction) txControl2.getMock(); + EntityManager manager2 = mock(EntityManager.class); + EntityTransaction tx2 = mock(EntityTransaction.class); - managerControl.expectAndReturn(manager.getTransaction(), tx, 2); - factoryControl.expectAndReturn(factory.createEntityManager(), manager2); - managerControl2.expectAndReturn(manager2.getTransaction(), tx2, 3); - txControl.expectAndReturn(tx.getRollbackOnly(), false); - txControl2.expectAndReturn(tx2.getRollbackOnly(), false); - manager.flush(); - tx.commit(); - tx2.begin(); - tx2.commit(); - manager2.flush(); - managerControl2.expectAndReturn(manager2.isOpen(), true); - manager2.close(); - - factoryControl.replay(); - managerControl.replay(); - txControl.replay(); - managerControl2.replay(); - txControl2.replay(); + given(manager.getTransaction()).willReturn(tx); + given(factory.createEntityManager()).willReturn(manager, manager2); + given(manager2.getTransaction()).willReturn(tx2); + given(manager2.isOpen()).willReturn(true); assertTrue(!TransactionSynchronizationManager.hasResource(factory)); assertTrue(!TransactionSynchronizationManager.isSynchronizationActive()); @@ -762,24 +653,18 @@ public class JpaTransactionManagerTests extends TestCase { assertTrue(!TransactionSynchronizationManager.hasResource(factory)); assertTrue(!TransactionSynchronizationManager.isSynchronizationActive()); - factoryControl.verify(); - managerControl.verify(); - txControl.verify(); - managerControl2.verify(); - txControl2.verify(); + verify(tx).commit(); + verify(tx2).begin(); + verify(tx2).commit(); + verify(manager).flush(); + verify(manager).close(); + verify(manager2).flush(); + verify(manager2).close(); } + @Test public void testTransactionCommitWithPropagationSupports() { - managerControl.reset(); - txControl.reset(); - - manager.flush(); - managerControl.expectAndReturn(manager.isOpen(), true); - manager.close(); - - factoryControl.replay(); - managerControl.replay(); - txControl.replay(); + given(manager.isOpen()).willReturn(true); final List l = new ArrayList(); l.add("test"); @@ -809,22 +694,13 @@ public class JpaTransactionManagerTests extends TestCase { assertTrue(!TransactionSynchronizationManager.hasResource(factory)); assertTrue(!TransactionSynchronizationManager.isSynchronizationActive()); - factoryControl.verify(); - managerControl.verify(); - txControl.verify(); + verify(manager).flush(); + verify(manager).close(); } + @Test public void testTransactionRollbackWithPropagationSupports() { - managerControl.reset(); - txControl.reset(); - - manager.flush(); - managerControl.expectAndReturn(manager.isOpen(), true); - manager.close(); - - factoryControl.replay(); - managerControl.replay(); - txControl.replay(); + given(manager.isOpen()).willReturn(true); tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_SUPPORTS); @@ -852,24 +728,13 @@ public class JpaTransactionManagerTests extends TestCase { assertTrue(!TransactionSynchronizationManager.hasResource(factory)); assertTrue(!TransactionSynchronizationManager.isSynchronizationActive()); - factoryControl.verify(); - managerControl.verify(); - txControl.verify(); + verify(manager).flush(); + verify(manager).close(); } + @Test public void testTransactionCommitWithPrebound() { - factoryControl.reset(); - managerControl.reset(); - txControl.reset(); - - managerControl.expectAndReturn(manager.getTransaction(), tx, 3); - tx.begin(); - txControl.expectAndReturn(tx.getRollbackOnly(), false); - tx.commit(); - - factoryControl.replay(); - managerControl.replay(); - txControl.replay(); + given(manager.getTransaction()).willReturn(tx); final List l = new ArrayList(); l.add("test"); @@ -901,25 +766,15 @@ public class JpaTransactionManagerTests extends TestCase { TransactionSynchronizationManager.unbindResource(factory); } - factoryControl.verify(); - managerControl.verify(); - txControl.verify(); + verify(tx).begin(); + verify(tx).commit(); } + @Test public void testTransactionRollbackWithPrebound() { - factoryControl.reset(); - managerControl.reset(); - txControl.reset(); - managerControl.expectAndReturn(manager.getTransaction(), tx, 2); - tx.begin(); - txControl.expectAndReturn(tx.isActive(), true); - tx.rollback(); - manager.clear(); - - factoryControl.replay(); - managerControl.replay(); - txControl.replay(); + given(manager.getTransaction()).willReturn(tx); + given(tx.isActive()).willReturn(true); assertTrue(!TransactionSynchronizationManager.hasResource(factory)); assertTrue(!TransactionSynchronizationManager.isSynchronizationActive()); @@ -949,22 +804,13 @@ public class JpaTransactionManagerTests extends TestCase { TransactionSynchronizationManager.unbindResource(factory); } - factoryControl.verify(); - managerControl.verify(); - txControl.verify(); + verify(tx).begin(); + verify(tx).rollback(); + verify(manager).clear(); } + @Test public void testTransactionCommitWithPreboundAndPropagationSupports() { - factoryControl.reset(); - managerControl.reset(); - txControl.reset(); - - manager.joinTransaction(); - manager.flush(); - - factoryControl.replay(); - managerControl.replay(); - txControl.replay(); final List l = new ArrayList(); l.add("test"); @@ -1000,23 +846,12 @@ public class JpaTransactionManagerTests extends TestCase { TransactionSynchronizationManager.unbindResource(factory); } - factoryControl.verify(); - managerControl.verify(); - txControl.verify(); + verify(manager).joinTransaction(); + verify(manager).flush(); } + @Test public void testTransactionRollbackWithPreboundAndPropagationSupports() { - factoryControl.reset(); - managerControl.reset(); - txControl.reset(); - - manager.joinTransaction(); - manager.flush(); - manager.clear(); - - factoryControl.replay(); - managerControl.replay(); - txControl.replay(); tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_SUPPORTS); @@ -1050,26 +885,17 @@ public class JpaTransactionManagerTests extends TestCase { TransactionSynchronizationManager.unbindResource(factory); } - factoryControl.verify(); - managerControl.verify(); - txControl.verify(); + verify(manager).joinTransaction(); + verify(manager).flush(); + verify(manager).clear(); } + @Test public void testTransactionCommitWithDataSource() throws SQLException { - MockControl dsControl = MockControl.createControl(DataSource.class); - DataSource ds = (DataSource) dsControl.getMock(); + DataSource ds = mock(DataSource.class); transactionManager.setDataSource(ds); - managerControl.expectAndReturn(manager.getTransaction(), tx); - managerControl.expectAndReturn(manager.getTransaction(), tx); - txControl.expectAndReturn(tx.getRollbackOnly(), false); - tx.commit(); - manager.flush(); - - factoryControl.replay(); - managerControl.replay(); - txControl.replay(); - dsControl.replay(); + given(manager.getTransaction()).willReturn(tx); final List l = new ArrayList(); l.add("test"); @@ -1097,23 +923,16 @@ public class JpaTransactionManagerTests extends TestCase { assertTrue(!TransactionSynchronizationManager.hasResource(factory)); assertTrue(!TransactionSynchronizationManager.isSynchronizationActive()); - factoryControl.verify(); - managerControl.verify(); - txControl.verify(); - dsControl.verify(); + verify(tx).commit(); + verify(manager).flush(); + verify(manager).close(); } + @Test public void testInvalidIsolation() { tt.setIsolationLevel(TransactionDefinition.ISOLATION_SERIALIZABLE); - txControl.reset(); - managerControl.reset(); - managerControl.expectAndReturn(manager.isOpen(), true); - manager.close(); - - factoryControl.replay(); - managerControl.replay(); - txControl.replay(); + given(manager.isOpen()).willReturn(true); try { tt.execute(new TransactionCallbackWithoutResult() { @@ -1127,21 +946,12 @@ public class JpaTransactionManagerTests extends TestCase { // expected } - factoryControl.verify(); - managerControl.verify(); - txControl.verify(); + verify(manager).close(); } + @Test public void testTransactionFlush() { - managerControl.expectAndReturn(manager.getTransaction(), tx); - txControl.expectAndReturn(tx.getRollbackOnly(), false); - managerControl.expectAndReturn(manager.getTransaction(), tx); - tx.commit(); - manager.flush(); - - factoryControl.replay(); - managerControl.replay(); - txControl.replay(); + given(manager.getTransaction()).willReturn(tx); assertTrue(!TransactionSynchronizationManager.hasResource(factory)); assertTrue(!TransactionSynchronizationManager.isSynchronizationActive()); @@ -1157,9 +967,9 @@ public class JpaTransactionManagerTests extends TestCase { assertTrue(!TransactionSynchronizationManager.hasResource(factory)); assertTrue(!TransactionSynchronizationManager.isSynchronizationActive()); - factoryControl.verify(); - managerControl.verify(); - txControl.verify(); + verify(tx).commit(); + verify(manager).flush(); + verify(manager).close(); } } diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBeanTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBeanTests.java index 393d316db0a..5f20a375d4b 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBeanTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBeanTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,8 +16,22 @@ package org.springframework.orm.jpa; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNotSame; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willThrow; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + import java.util.Map; import java.util.Properties; + import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; @@ -27,8 +41,7 @@ import javax.persistence.spi.PersistenceProvider; import javax.persistence.spi.PersistenceUnitInfo; import javax.persistence.spi.PersistenceUnitTransactionType; -import org.easymock.MockControl; - +import org.junit.Test; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.dao.DataAccessException; import org.springframework.dao.OptimisticLockingFailureException; @@ -41,6 +54,7 @@ import org.springframework.util.SerializationTestUtils; /** * @author Rod Johnson * @author Juergen Hoeller + * @author Phillip Webb */ public class LocalContainerEntityManagerFactoryBeanTests extends AbstractEntityManagerFactoryBeanTests { @@ -51,13 +65,15 @@ public class LocalContainerEntityManagerFactoryBeanTests extends AbstractEntityM private static PersistenceUnitInfo actualPui; + @Test public void testValidPersistenceUnit() throws Exception { parseValidPersistenceUnit(); } + @Test public void testExceptionTranslationWithNoDialect() throws Exception { LocalContainerEntityManagerFactoryBean cefb = parseValidPersistenceUnit(); - EntityManagerFactory emf = cefb.getObject(); + cefb.getObject(); assertNull("No dialect set", cefb.getJpaDialect()); RuntimeException in1 = new RuntimeException("in1"); @@ -68,6 +84,7 @@ public class LocalContainerEntityManagerFactoryBeanTests extends AbstractEntityM assertSame(in2, dex.getCause()); } + @Test public void testEntityManagerFactoryIsProxied() throws Exception { LocalContainerEntityManagerFactoryBean cefb = parseValidPersistenceUnit(); EntityManagerFactory emf = cefb.getObject(); @@ -84,21 +101,12 @@ public class LocalContainerEntityManagerFactoryBeanTests extends AbstractEntityM assertNotNull(SerializationTestUtils.serializeAndDeserialize(emf)); } + @Test public void testApplicationManagedEntityManagerWithoutTransaction() throws Exception { Object testEntity = new Object(); + EntityManager mockEm = mock(EntityManager.class); - MockControl emMc = MockControl.createControl(EntityManager.class); - EntityManager mockEm = (EntityManager) emMc.getMock(); - mockEm.contains(testEntity); - emMc.setReturnValue(false); - emMc.replay(); - - // finish recording mock calls - mockEmf.createEntityManager(); - emfMc.setReturnValue(mockEm); - mockEmf.close(); - emfMc.setVoidCallable(); - emfMc.replay(); + given(mockEmf.createEntityManager()).willReturn(mockEm); LocalContainerEntityManagerFactoryBean cefb = parseValidPersistenceUnit(); EntityManagerFactory emf = cefb.getObject(); @@ -110,48 +118,24 @@ public class LocalContainerEntityManagerFactoryBeanTests extends AbstractEntityM cefb.destroy(); - emfMc.verify(); - emMc.verify(); + verify(mockEmf).close(); } + @Test public void testApplicationManagedEntityManagerWithTransaction() throws Exception { Object testEntity = new Object(); - MockControl tmMc = MockControl.createControl(EntityTransaction.class); - EntityTransaction mockTx = (EntityTransaction) tmMc.getMock(); - mockTx.isActive(); - tmMc.setReturnValue(false); - mockTx.begin(); - tmMc.setVoidCallable(); - mockTx.commit(); - tmMc.setVoidCallable(); - tmMc.replay(); + EntityTransaction mockTx = mock(EntityTransaction.class); // This one's for the tx (shared) - MockControl sharedEmMc = MockControl.createControl(EntityManager.class); - EntityManager sharedEm = (EntityManager) sharedEmMc.getMock(); - sharedEm.getTransaction(); - sharedEmMc.setReturnValue(new NoOpEntityTransaction(), 3); - sharedEm.close(); - sharedEmMc.setVoidCallable(); - sharedEmMc.replay(); - mockEmf.createEntityManager(); - emfMc.setReturnValue(sharedEm); + EntityManager sharedEm = mock(EntityManager.class); + given(sharedEm.getTransaction()).willReturn(new NoOpEntityTransaction()); // This is the application-specific one - MockControl emMc = MockControl.createControl(EntityManager.class); - EntityManager mockEm = (EntityManager) emMc.getMock(); - mockEm.getTransaction(); - emMc.setReturnValue(mockTx, 3); - mockEm.contains(testEntity); - emMc.setReturnValue(false); - emMc.replay(); + EntityManager mockEm = mock(EntityManager.class); + given(mockEm.getTransaction()).willReturn(mockTx); - mockEmf.createEntityManager(); - emfMc.setReturnValue(mockEm); - mockEmf.close(); - emfMc.setVoidCallable(); - emfMc.replay(); + given(mockEmf.createEntityManager()).willReturn(sharedEm, mockEm); LocalContainerEntityManagerFactoryBean cefb = parseValidPersistenceUnit(); @@ -172,49 +156,28 @@ public class LocalContainerEntityManagerFactoryBeanTests extends AbstractEntityM cefb.destroy(); - emfMc.verify(); - emMc.verify(); - tmMc.verify(); + verify(mockTx).begin(); + verify(mockTx).commit(); + verify(mockEm).contains(testEntity); + verify(mockEmf).close(); } + @Test public void testApplicationManagedEntityManagerWithTransactionAndCommitException() throws Exception { Object testEntity = new Object(); - MockControl tmMc = MockControl.createControl(EntityTransaction.class); - EntityTransaction mockTx = (EntityTransaction) tmMc.getMock(); - mockTx.isActive(); - tmMc.setReturnValue(false); - mockTx.begin(); - tmMc.setVoidCallable(); - mockTx.commit(); - tmMc.setThrowable(new OptimisticLockException()); - tmMc.replay(); + EntityTransaction mockTx = mock(EntityTransaction.class); + willThrow(new OptimisticLockException()).given(mockTx).commit(); // This one's for the tx (shared) - MockControl sharedEmMc = MockControl.createControl(EntityManager.class); - EntityManager sharedEm = (EntityManager) sharedEmMc.getMock(); - sharedEm.getTransaction(); - sharedEmMc.setReturnValue(new NoOpEntityTransaction(), 3); - sharedEm.close(); - sharedEmMc.setVoidCallable(); - sharedEmMc.replay(); - mockEmf.createEntityManager(); - emfMc.setReturnValue(sharedEm); + EntityManager sharedEm = mock(EntityManager.class); + given(sharedEm.getTransaction()).willReturn(new NoOpEntityTransaction()); // This is the application-specific one - MockControl emMc = MockControl.createControl(EntityManager.class); - EntityManager mockEm = (EntityManager) emMc.getMock(); - mockEm.getTransaction(); - emMc.setReturnValue(mockTx, 3); - mockEm.contains(testEntity); - emMc.setReturnValue(false); - emMc.replay(); + EntityManager mockEm = mock(EntityManager.class); + given(mockEm.getTransaction()).willReturn(mockTx); - mockEmf.createEntityManager(); - emfMc.setReturnValue(mockEm); - mockEmf.close(); - emfMc.setVoidCallable(); - emfMc.replay(); + given(mockEmf.createEntityManager()).willReturn(sharedEm, mockEm); LocalContainerEntityManagerFactoryBean cefb = parseValidPersistenceUnit(); @@ -241,39 +204,23 @@ public class LocalContainerEntityManagerFactoryBeanTests extends AbstractEntityM cefb.destroy(); - emfMc.verify(); - emMc.verify(); - tmMc.verify(); + verify(mockTx).begin(); + verify(mockEm).contains(testEntity); + verify(mockEmf).close(); } + @Test public void testApplicationManagedEntityManagerWithJtaTransaction() throws Exception { Object testEntity = new Object(); // This one's for the tx (shared) - MockControl sharedEmMc = MockControl.createControl(EntityManager.class); - EntityManager sharedEm = (EntityManager) sharedEmMc.getMock(); - sharedEm.getTransaction(); - sharedEmMc.setReturnValue(new NoOpEntityTransaction(), 3); - sharedEm.close(); - sharedEmMc.setVoidCallable(1); - sharedEmMc.replay(); - mockEmf.createEntityManager(); - emfMc.setReturnValue(sharedEm); + EntityManager sharedEm = mock(EntityManager.class); + given(sharedEm.getTransaction()).willReturn(new NoOpEntityTransaction()); // This is the application-specific one - MockControl emMc = MockControl.createControl(EntityManager.class); - EntityManager mockEm = (EntityManager) emMc.getMock(); - mockEm.joinTransaction(); - emMc.setVoidCallable(1); - mockEm.contains(testEntity); - emMc.setReturnValue(false); - emMc.replay(); + EntityManager mockEm = mock(EntityManager.class); - mockEmf.createEntityManager(); - emfMc.setReturnValue(mockEm); - mockEmf.close(); - emfMc.setVoidCallable(); - emfMc.replay(); + given(mockEmf.createEntityManager()).willReturn(sharedEm, mockEm); LocalContainerEntityManagerFactoryBean cefb = parseValidPersistenceUnit(); MutablePersistenceUnitInfo pui = ((MutablePersistenceUnitInfo) cefb.getPersistenceUnitInfo()); @@ -296,8 +243,9 @@ public class LocalContainerEntityManagerFactoryBeanTests extends AbstractEntityM cefb.destroy(); - emfMc.verify(); - emMc.verify(); + verify(mockEm).joinTransaction(); + verify(mockEm).contains(testEntity); + verify(mockEmf).close(); } public LocalContainerEntityManagerFactoryBean parseValidPersistenceUnit() throws Exception { @@ -307,6 +255,7 @@ public class LocalContainerEntityManagerFactoryBeanTests extends AbstractEntityM return emfb; } + @Test public void testInvalidPersistenceUnitName() throws Exception { try { createEntityManagerFactoryBean("org/springframework/orm/jpa/domain/persistence.xml", null, "call me Bob"); @@ -347,6 +296,7 @@ public class LocalContainerEntityManagerFactoryBeanTests extends AbstractEntityM //emfMc.verify(); } + @Test public void testRejectsMissingPersistenceUnitInfo() throws Exception { LocalContainerEntityManagerFactoryBean containerEmfb = new LocalContainerEntityManagerFactoryBean(); String entityManagerName = "call me Bob"; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBeanTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBeanTests.java index 048eb2d4ae9..de6667f543f 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBeanTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBeanTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,10 @@ package org.springframework.orm.jpa; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; +import static org.mockito.Mockito.verify; + import java.util.Map; import java.util.Properties; @@ -23,8 +27,12 @@ import javax.persistence.EntityManagerFactory; import javax.persistence.spi.PersistenceProvider; import javax.persistence.spi.PersistenceUnitInfo; +import org.junit.After; +import org.junit.Test; + /** * @author Rod Johnson + * @author Phillip Webb */ public class LocalEntityManagerFactoryBeanTests extends AbstractEntityManagerFactoryBeanTests { @@ -34,19 +42,17 @@ public class LocalEntityManagerFactoryBeanTests extends AbstractEntityManagerFac private static Map actualProps; - - @Override - protected void setUp() throws Exception { - super.setUp(); - mockEmf.close(); - emfMc.setVoidCallable(); - emfMc.replay(); + @After + public void verifyClosed() throws Exception { + verify(mockEmf).close(); } + @Test public void testValidUsageWithDefaultProperties() throws Exception { testValidUsage(null); } + @Test public void testValidUsageWithExplicitProperties() throws Exception { testValidUsage(new Properties()); } @@ -73,8 +79,6 @@ public class LocalEntityManagerFactoryBeanTests extends AbstractEntityManagerFac checkInvariants(lemfb); lemfb.destroy(); - - emfMc.verify(); } diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/support/JpaDaoSupportTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/support/JpaDaoSupportTests.java index b2b509f3dfa..4925258a669 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/support/JpaDaoSupportTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/support/JpaDaoSupportTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,29 +13,32 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.orm.jpa.support; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; +import static org.mockito.Mockito.mock; + import java.util.ArrayList; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; -import junit.framework.TestCase; - -import org.easymock.MockControl; +import org.junit.Test; import org.springframework.orm.jpa.JpaTemplate; /** * @author Costin Leau - * + * @author Phillip Webb */ -public class JpaDaoSupportTests extends TestCase { +public class JpaDaoSupportTests { + @Test public void testJpaDaoSupportWithEntityManager() throws Exception { - MockControl mockControl = MockControl.createControl(EntityManager.class); - EntityManager entityManager = (EntityManager) mockControl.getMock(); - mockControl.replay(); + EntityManager entityManager = mock(EntityManager.class); final List test = new ArrayList(); JpaDaoSupport dao = new JpaDaoSupport() { @Override @@ -48,13 +51,11 @@ public class JpaDaoSupportTests extends TestCase { assertNotNull("jpa template not created", dao.getJpaTemplate()); assertEquals("incorrect entity manager", entityManager, dao.getJpaTemplate().getEntityManager()); assertEquals("initDao not called", test.size(), 1); - mockControl.verify(); } + @Test public void testJpaDaoSupportWithEntityManagerFactory() throws Exception { - MockControl mockControl = MockControl.createControl(EntityManagerFactory.class); - EntityManagerFactory entityManagerFactory = (EntityManagerFactory) mockControl.getMock(); - mockControl.replay(); + EntityManagerFactory entityManagerFactory = mock(EntityManagerFactory.class); final List test = new ArrayList(); JpaDaoSupport dao = new JpaDaoSupport() { @Override @@ -68,9 +69,9 @@ public class JpaDaoSupportTests extends TestCase { assertEquals("incorrect entity manager factory", entityManagerFactory, dao.getJpaTemplate().getEntityManagerFactory()); assertEquals("initDao not called", test.size(), 1); - mockControl.verify(); } + @Test public void testJpaDaoSupportWithJpaTemplate() throws Exception { JpaTemplate template = new JpaTemplate(); final List test = new ArrayList(); @@ -87,6 +88,7 @@ public class JpaDaoSupportTests extends TestCase { assertEquals("initDao not called", test.size(), 1); } + @Test public void testInvalidJpaTemplate() throws Exception { JpaDaoSupport dao = new JpaDaoSupport() { }; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewTests.java index 3431e4a4216..8dd05c32b3d 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,13 +16,16 @@ package org.springframework.orm.jpa.support; -import static org.easymock.EasyMock.anyObject; -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.createStrictMock; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.reset; -import static org.easymock.EasyMock.verify; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.BDDMockito.given; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; import java.io.IOException; import java.util.concurrent.Callable; @@ -35,8 +38,9 @@ import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; -import junit.framework.TestCase; - +import org.junit.After; +import org.junit.Before; +import org.junit.Test; import org.springframework.core.task.SimpleAsyncTaskExecutor; import org.springframework.mock.web.test.MockFilterConfig; import org.springframework.mock.web.test.MockHttpServletRequest; @@ -56,8 +60,9 @@ import org.springframework.web.context.support.StaticWebApplicationContext; * @author Costin Leau * @author Juergen Hoeller * @author Chris Beams + * @author Phillip Webb */ -public class OpenEntityManagerInViewTests extends TestCase { +public class OpenEntityManagerInViewTests { private EntityManager manager; @@ -66,25 +71,26 @@ public class OpenEntityManagerInViewTests extends TestCase { private JpaTemplate template; - @Override - protected void setUp() throws Exception { - factory = createMock(EntityManagerFactory.class); - manager = createMock(EntityManager.class); + @Before + public void setUp() throws Exception { + factory = mock(EntityManagerFactory.class); + manager = mock(EntityManager.class); template = new JpaTemplate(factory); template.afterPropertiesSet(); - expect(factory.createEntityManager()).andReturn(manager); + given(factory.createEntityManager()).willReturn(manager); } - @Override - protected void tearDown() throws Exception { + @After + public void tearDown() throws Exception { assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); assertFalse(TransactionSynchronizationManager.isCurrentTransactionReadOnly()); assertFalse(TransactionSynchronizationManager.isActualTransactionActive()); } + @Test public void testOpenEntityManagerInViewInterceptor() throws Exception { OpenEntityManagerInViewInterceptor interceptor = new OpenEntityManagerInViewInterceptor(); interceptor.setEntityManagerFactory(factory); @@ -92,8 +98,6 @@ public class OpenEntityManagerInViewTests extends TestCase { MockServletContext sc = new MockServletContext(); MockHttpServletRequest request = new MockHttpServletRequest(sc); - replay(manager, factory); - interceptor.preHandle(new ServletWebRequest(request)); assertTrue(TransactionSynchronizationManager.hasResource(factory)); @@ -111,29 +115,18 @@ public class OpenEntityManagerInViewTests extends TestCase { interceptor.postHandle(new ServletWebRequest(request), null); interceptor.afterCompletion(new ServletWebRequest(request), null); - verify(manager, factory); - - reset(manager, factory); - replay(manager, factory); - interceptor.postHandle(new ServletWebRequest(request), null); assertTrue(TransactionSynchronizationManager.hasResource(factory)); - verify(manager, factory); - - reset(manager, factory); - - expect(manager.isOpen()).andReturn(true); - manager.close(); - - replay(manager, factory); + given(manager.isOpen()).willReturn(true); interceptor.afterCompletion(new ServletWebRequest(request), null); assertFalse(TransactionSynchronizationManager.hasResource(factory)); - verify(manager, factory); + verify(manager).close(); } + @Test public void testOpenEntityManagerInViewInterceptorAsyncScenario() throws Exception { // Initial request thread @@ -145,19 +138,10 @@ public class OpenEntityManagerInViewTests extends TestCase { MockHttpServletRequest request = new MockHttpServletRequest(sc); ServletWebRequest webRequest = new ServletWebRequest(request); - replay(manager, factory); - interceptor.preHandle(webRequest); assertTrue(TransactionSynchronizationManager.hasResource(factory)); - verify(manager, factory); - - AsyncWebRequest asyncWebRequest = createStrictMock(AsyncWebRequest.class); - asyncWebRequest.addCompletionHandler((Runnable) anyObject()); - asyncWebRequest.addTimeoutHandler((Runnable) anyObject()); - asyncWebRequest.addCompletionHandler((Runnable) anyObject()); - asyncWebRequest.startAsync(); - replay(asyncWebRequest); + AsyncWebRequest asyncWebRequest = mock(AsyncWebRequest.class); WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(webRequest); asyncManager.setTaskExecutor(new SyncTaskExecutor()); @@ -169,23 +153,19 @@ public class OpenEntityManagerInViewTests extends TestCase { } }); - verify(asyncWebRequest); + verify(asyncWebRequest, times(2)).addCompletionHandler(any(Runnable.class)); + verify(asyncWebRequest).addTimeoutHandler(any(Runnable.class)); + verify(asyncWebRequest, times(2)).addCompletionHandler(any(Runnable.class)); + verify(asyncWebRequest).startAsync(); interceptor.afterConcurrentHandlingStarted(webRequest); assertFalse(TransactionSynchronizationManager.hasResource(factory)); // Async dispatch thread - reset(manager, factory); - replay(manager, factory); - interceptor.preHandle(webRequest); assertTrue(TransactionSynchronizationManager.hasResource(factory)); - verify(manager, factory); - reset(manager, factory); - replay(manager, factory); - asyncManager.clearConcurrentResult(); // check that further invocations simply participate @@ -202,41 +182,26 @@ public class OpenEntityManagerInViewTests extends TestCase { interceptor.postHandle(new ServletWebRequest(request), null); interceptor.afterCompletion(new ServletWebRequest(request), null); - verify(manager, factory); - reset(manager, factory); - replay(manager, factory); - interceptor.postHandle(webRequest, null); assertTrue(TransactionSynchronizationManager.hasResource(factory)); - verify(manager, factory); - reset(manager, factory); - - expect(manager.isOpen()).andReturn(true); - manager.close(); - - replay(manager, factory); + given(manager.isOpen()).willReturn(true); interceptor.afterCompletion(webRequest, null); assertFalse(TransactionSynchronizationManager.hasResource(factory)); - verify(manager, factory); + verify(manager).close(); } + @Test public void testOpenEntityManagerInViewFilter() throws Exception { - expect(manager.isOpen()).andReturn(true); - manager.close(); + given(manager.isOpen()).willReturn(true); - replay(manager, factory); + final EntityManagerFactory factory2 = mock(EntityManagerFactory.class); + final EntityManager manager2 = mock(EntityManager.class); - final EntityManagerFactory factory2 = createMock(EntityManagerFactory.class); - final EntityManager manager2 = createMock(EntityManager.class); - - expect(factory2.createEntityManager()).andReturn(manager2); - expect(manager2.isOpen()).andReturn(true); - manager2.close(); - - replay(factory2, manager2); + given(factory2.createEntityManager()).willReturn(manager2); + given(manager2.isOpen()).willReturn(true); MockServletContext sc = new MockServletContext(); StaticWebApplicationContext wac = new StaticWebApplicationContext(); @@ -283,26 +248,21 @@ public class OpenEntityManagerInViewTests extends TestCase { assertFalse(TransactionSynchronizationManager.hasResource(factory2)); assertNotNull(request.getAttribute("invoked")); - verify(manager, factory); - verify(factory2, manager2); + verify(manager).close(); + verify(manager2).close(); wac.close(); } + @Test public void testOpenEntityManagerInViewFilterAsyncScenario() throws Exception { - expect(manager.isOpen()).andReturn(true); - manager.close(); + given(manager.isOpen()).willReturn(true); - replay(manager, factory); + final EntityManagerFactory factory2 = mock(EntityManagerFactory.class); + final EntityManager manager2 = mock(EntityManager.class); - final EntityManagerFactory factory2 = createMock(EntityManagerFactory.class); - final EntityManager manager2 = createMock(EntityManager.class); - - expect(factory2.createEntityManager()).andReturn(manager2); - expect(manager2.isOpen()).andReturn(true); - manager2.close(); - - replay(factory2, manager2); + given(factory2.createEntityManager()).willReturn(manager2); + given(manager2.isOpen()).willReturn(true); MockServletContext sc = new MockServletContext(); StaticWebApplicationContext wac = new StaticWebApplicationContext(); @@ -348,13 +308,8 @@ public class OpenEntityManagerInViewTests extends TestCase { FilterChain filterChain3 = new PassThroughFilterChain(filter2, filterChain2); - AsyncWebRequest asyncWebRequest = createMock(AsyncWebRequest.class); - asyncWebRequest.addCompletionHandler((Runnable) anyObject()); - asyncWebRequest.addTimeoutHandler((Runnable) anyObject()); - asyncWebRequest.addCompletionHandler((Runnable) anyObject()); - asyncWebRequest.startAsync(); - expect(asyncWebRequest.isAsyncStarted()).andReturn(true).anyTimes(); - replay(asyncWebRequest); + AsyncWebRequest asyncWebRequest = mock(AsyncWebRequest.class); + given(asyncWebRequest.isAsyncStarted()).willReturn(true); WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request); asyncManager.setTaskExecutor(new SyncTaskExecutor()); @@ -375,11 +330,15 @@ public class OpenEntityManagerInViewTests extends TestCase { assertEquals(1, count2.get()); assertNotNull(request.getAttribute("invoked")); + verify(asyncWebRequest, times(2)).addCompletionHandler(any(Runnable.class)); + verify(asyncWebRequest).addTimeoutHandler(any(Runnable.class)); + verify(asyncWebRequest, times(2)).addCompletionHandler(any(Runnable.class)); + verify(asyncWebRequest).startAsync(); + // Async dispatch after concurrent handling produces result ... reset(asyncWebRequest); - expect(asyncWebRequest.isAsyncStarted()).andReturn(false).anyTimes(); - replay(asyncWebRequest); + given(asyncWebRequest.isAsyncStarted()).willReturn(false); assertFalse(TransactionSynchronizationManager.hasResource(factory)); assertFalse(TransactionSynchronizationManager.hasResource(factory2)); @@ -389,8 +348,8 @@ public class OpenEntityManagerInViewTests extends TestCase { assertEquals(2, count.get()); assertEquals(2, count2.get()); - verify(manager, factory); - verify(factory2, manager2); + verify(manager).close(); + verify(manager2).close(); wac.close(); } diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionTests.java index 51a5209477d..f7a26112fc5 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionTests.java @@ -16,6 +16,15 @@ package org.springframework.orm.jpa.support; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.withSettings; + import java.io.Serializable; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; @@ -23,6 +32,7 @@ import java.lang.reflect.Proxy; import java.util.HashMap; import java.util.Map; import java.util.Properties; + import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.PersistenceContext; @@ -30,10 +40,9 @@ import javax.persistence.PersistenceContextType; import javax.persistence.PersistenceProperty; import javax.persistence.PersistenceUnit; -import org.easymock.MockControl; import org.hibernate.ejb.HibernateEntityManager; import org.junit.Ignore; - +import org.junit.Test; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.support.RootBeanDefinition; @@ -53,10 +62,13 @@ import org.springframework.util.SerializationTestUtils; * * @author Rod Johnson * @author Juergen Hoeller + * @author Phillip Webb */ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanTests { + @Test public void testPrivatePersistenceContextField() throws Exception { + mockEmf = mock(EntityManagerFactory.class, withSettings().serializable()); GenericApplicationContext gac = new GenericApplicationContext(); gac.getDefaultListableBeanFactory().registerSingleton("entityManagerFactory", mockEmf); gac.registerBeanDefinition("annotationProcessor", @@ -78,6 +90,7 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT assertNotNull(SerializationTestUtils.serializeAndDeserialize(bean2.em)); } + @Test public void testPrivateVendorSpecificPersistenceContextField() { GenericApplicationContext gac = new GenericApplicationContext(); gac.getDefaultListableBeanFactory().registerSingleton("entityManagerFactory", mockEmf); @@ -92,11 +105,10 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT assertNotNull(bean.em); } + @Test public void testPublicExtendedPersistenceContextSetter() throws Exception { - EntityManager mockEm = MockControl.createControl(EntityManager.class).getMock(); - mockEmf.createEntityManager(); - emfMc.setReturnValue(mockEm, 1); - emfMc.replay(); + EntityManager mockEm = mock(EntityManager.class); + given(mockEmf.createEntityManager()).willReturn(mockEm); GenericApplicationContext gac = new GenericApplicationContext(); gac.getDefaultListableBeanFactory().registerSingleton("entityManagerFactory", mockEmf); @@ -109,24 +121,13 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT DefaultPublicPersistenceContextSetter bean = (DefaultPublicPersistenceContextSetter) gac.getBean( DefaultPublicPersistenceContextSetter.class.getName()); assertNotNull(bean.em); - emfMc.verify(); } + @Test public void testPublicSpecificExtendedPersistenceContextSetter() throws Exception { - emfMc.replay(); - - MockControl emfMc2 = MockControl.createControl(EntityManagerFactory.class); - EntityManagerFactory mockEmf2 = emfMc2.getMock(); - MockControl emMc2 = MockControl.createControl(EntityManager.class); - EntityManager mockEm2 = emMc2.getMock(); - mockEm2.getTransaction(); - emMc2.setReturnValue(null, 1); - mockEm2.flush(); - emMc2.setVoidCallable(1); - emMc2.replay(); - mockEmf2.createEntityManager(); - emfMc2.setReturnValue(mockEm2, 1); - emfMc2.replay(); + EntityManagerFactory mockEmf2 = mock(EntityManagerFactory.class); + EntityManager mockEm2 = mock(EntityManager.class); + given(mockEmf2.createEntityManager()).willReturn(mockEm2); GenericApplicationContext gac = new GenericApplicationContext(); gac.getDefaultListableBeanFactory().registerSingleton("entityManagerFactory", mockEmf); @@ -141,16 +142,15 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT SpecificPublicPersistenceContextSetter.class.getName()); assertNotNull(bean.getEntityManager()); bean.getEntityManager().flush(); - emfMc.verify(); - emfMc2.verify(); + verify(mockEm2).getTransaction(); + verify(mockEm2).flush(); } + @Test public void testPublicExtendedPersistenceContextSetterWithSerialization() throws Exception { DummyInvocationHandler ih = new DummyInvocationHandler(); Object mockEm = Proxy.newProxyInstance(getClass().getClassLoader(), new Class[] {EntityManager.class}, ih); - mockEmf.createEntityManager(); - emfMc.setReturnValue(mockEm, 1); - emfMc.replay(); + given(mockEmf.createEntityManager()).willReturn((EntityManager) mockEm); GenericApplicationContext gac = new GenericApplicationContext(); SimpleMapScope myScope = new SimpleMapScope(); @@ -172,27 +172,19 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT serialized.close(); assertTrue(DummyInvocationHandler.closed); DummyInvocationHandler.closed = false; - emfMc.verify(); } + @Test + @SuppressWarnings("unchecked") public void testPublicExtendedPersistenceContextSetterWithEntityManagerInfoAndSerialization() throws Exception { - Object mockEm = Proxy.newProxyInstance( - getClass().getClassLoader(), new Class[] {EntityManager.class}, new DummyInvocationHandler()); - MockControl emfMc = MockControl.createControl(EntityManagerFactoryWithInfo.class); - EntityManagerFactoryWithInfo mockEmf = (EntityManagerFactoryWithInfo) emfMc.getMock(); - mockEmf.getNativeEntityManagerFactory(); - emfMc.setReturnValue(mockEmf); - mockEmf.getPersistenceUnitInfo(); - emfMc.setReturnValue(null); - mockEmf.getJpaDialect(); - emfMc.setReturnValue(new DefaultJpaDialect()); - mockEmf.getEntityManagerInterface(); - emfMc.setReturnValue(EntityManager.class); - mockEmf.getBeanClassLoader(); - emfMc.setReturnValue(getClass().getClassLoader()); - mockEmf.createEntityManager(); - emfMc.setReturnValue(mockEm); - emfMc.replay(); + EntityManager mockEm = mock(EntityManager.class, withSettings().serializable()); + given(mockEm.isOpen()).willReturn(true); + EntityManagerFactoryWithInfo mockEmf = mock(EntityManagerFactoryWithInfo.class); + given(mockEmf.getNativeEntityManagerFactory()).willReturn(mockEmf); + given(mockEmf.getJpaDialect()).willReturn(new DefaultJpaDialect()); + given(mockEmf.getEntityManagerInterface()).willReturn((Class)EntityManager.class); + given(mockEmf.getBeanClassLoader()).willReturn(getClass().getClassLoader()); + given(mockEmf.createEntityManager()).willReturn(mockEm); GenericApplicationContext gac = new GenericApplicationContext(); gac.getDefaultListableBeanFactory().registerSingleton("entityManagerFactory", mockEmf); @@ -206,11 +198,11 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT DefaultPublicPersistenceContextSetter.class.getName()); assertNotNull(bean.em); assertNotNull(SerializationTestUtils.serializeAndDeserialize(bean.em)); - emfMc.verify(); } + @Test public void testPublicExtendedPersistenceContextSetterWithOverriding() { - EntityManager mockEm2 = MockControl.createControl(EntityManager.class).getMock(); + EntityManager mockEm2 = mock(EntityManager.class); GenericApplicationContext gac = new GenericApplicationContext(); gac.getDefaultListableBeanFactory().registerSingleton("entityManagerFactory", mockEmf); @@ -226,6 +218,7 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT assertSame(mockEm2, bean.em); } + @Test public void testPrivatePersistenceUnitField() { GenericApplicationContext gac = new GenericApplicationContext(); gac.getDefaultListableBeanFactory().registerSingleton("entityManagerFactory", mockEmf); @@ -240,6 +233,7 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT assertSame(mockEmf, bean.emf); } + @Test public void testPublicPersistenceUnitSetter() { GenericApplicationContext gac = new GenericApplicationContext(); gac.getDefaultListableBeanFactory().registerSingleton("entityManagerFactory", mockEmf); @@ -254,9 +248,9 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT assertSame(mockEmf, bean.emf); } + @Test public void testPublicPersistenceUnitSetterWithOverriding() { - EntityManagerFactory mockEmf2 = - MockControl.createControl(EntityManagerFactory.class).getMock(); + EntityManagerFactory mockEmf2 = mock(EntityManagerFactory.class); GenericApplicationContext gac = new GenericApplicationContext(); gac.getDefaultListableBeanFactory().registerSingleton("entityManagerFactory", mockEmf); @@ -272,9 +266,9 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT assertSame(mockEmf2, bean.emf); } + @Test public void testPublicPersistenceUnitSetterWithUnitIdentifiedThroughBeanName() { - EntityManagerFactory mockEmf2 = - MockControl.createControl(EntityManagerFactory.class).getMock(); + EntityManagerFactory mockEmf2 = mock(EntityManagerFactory.class); GenericApplicationContext gac = new GenericApplicationContext(); gac.getDefaultListableBeanFactory().registerSingleton("entityManagerFactory", mockEmf); @@ -297,12 +291,10 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT assertSame(mockEmf2, bean2.emf); } + @Test public void testPublicPersistenceUnitSetterWithMultipleUnitsIdentifiedThroughUnitName() { - MockControl emf2Mc = MockControl.createControl(EntityManagerFactoryWithInfo.class); - EntityManagerFactoryWithInfo mockEmf2 = (EntityManagerFactoryWithInfo) emf2Mc.getMock(); - mockEmf2.getPersistenceUnitName(); - emf2Mc.setReturnValue("Person", 2); - emf2Mc.replay(); + EntityManagerFactoryWithInfo mockEmf2 = mock(EntityManagerFactoryWithInfo.class); + given(mockEmf2.getPersistenceUnitName()).willReturn("Person"); GenericApplicationContext gac = new GenericApplicationContext(); gac.getDefaultListableBeanFactory().registerSingleton("entityManagerFactory", mockEmf); @@ -322,19 +314,14 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT gac.getBean(DefaultPublicPersistenceUnitSetterNamedPerson.class.getName()); assertSame(mockEmf, bean.emf); assertSame(mockEmf2, bean2.emf); - - emf2Mc.verify(); } @Ignore public void ignoreTestPersistenceUnitsFromJndi() { - mockEmf.createEntityManager(); - Object mockEm = MockControl.createControl(EntityManager.class).getMock(); - emfMc.setReturnValue(mockEm, 1); - emfMc.replay(); + EntityManager mockEm = mock(EntityManager.class); + given(mockEmf.createEntityManager()).willReturn(mockEm); - MockControl emf2Mc = MockControl.createControl(EntityManagerFactoryWithInfo.class); - EntityManagerFactoryWithInfo mockEmf2 = (EntityManagerFactoryWithInfo) emf2Mc.getMock(); + EntityManagerFactoryWithInfo mockEmf2 = mock(EntityManagerFactoryWithInfo.class); Map persistenceUnits = new HashMap(); persistenceUnits.put("", "pu1"); @@ -369,13 +356,11 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT assertSame(mockEmf2, bean2.emf); assertNotNull(bean3.em); assertNotNull(bean4.em); - - emfMc.verify(); } + @Test public void testPersistenceUnitsFromJndiWithDefaultUnit() { - MockControl emf2Mc = MockControl.createControl(EntityManagerFactoryWithInfo.class); - EntityManagerFactoryWithInfo mockEmf2 = (EntityManagerFactoryWithInfo) emf2Mc.getMock(); + EntityManagerFactoryWithInfo mockEmf2 = mock(EntityManagerFactoryWithInfo.class); Map persistenceUnits = new HashMap(); persistenceUnits.put("System", "pu1"); @@ -403,6 +388,7 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT assertSame(mockEmf2, bean2.emf); } + @Test public void testSinglePersistenceUnitFromJndi() { Map persistenceUnits = new HashMap(); persistenceUnits.put("Person", "pu1"); @@ -427,10 +413,11 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT assertSame(mockEmf, bean2.emf); } + @Test public void testPersistenceContextsFromJndi() { - Object mockEm = MockControl.createControl(EntityManager.class).getMock(); - Object mockEm2 = MockControl.createControl(EntityManager.class).getMock(); - Object mockEm3 = MockControl.createControl(EntityManager.class).getMock(); + EntityManager mockEm = mock(EntityManager.class); + EntityManager mockEm2 = mock(EntityManager.class); + EntityManager mockEm3 = mock(EntityManager.class); Map persistenceContexts = new HashMap(); persistenceContexts.put("", "pc1"); @@ -466,10 +453,11 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT assertSame(mockEm3, bean3.em); } + @Test public void testPersistenceContextsFromJndiWithDefaultUnit() { - Object mockEm = MockControl.createControl(EntityManager.class).getMock(); - Object mockEm2 = MockControl.createControl(EntityManager.class).getMock(); - Object mockEm3 = MockControl.createControl(EntityManager.class).getMock(); + EntityManager mockEm = mock(EntityManager.class); + EntityManager mockEm2 = mock(EntityManager.class); + EntityManager mockEm3 = mock(EntityManager.class); Map persistenceContexts = new HashMap(); persistenceContexts.put("System", "pc1"); @@ -506,9 +494,10 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT assertSame(mockEm3, bean3.em); } + @Test public void testSinglePersistenceContextFromJndi() { - Object mockEm = MockControl.createControl(EntityManager.class).getMock(); - Object mockEm2 = MockControl.createControl(EntityManager.class).getMock(); + EntityManager mockEm = mock(EntityManager.class); + EntityManager mockEm2 = mock(EntityManager.class); Map persistenceContexts = new HashMap(); persistenceContexts.put("System", "pc1"); @@ -537,6 +526,7 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT assertSame(mockEm2, bean2.em); } + @Test public void testFieldOfWrongTypeAnnotatedWithPersistenceUnit() { PersistenceAnnotationBeanPostProcessor babpp = new PersistenceAnnotationBeanPostProcessor(); try { @@ -548,6 +538,7 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT } } + @Test public void testSetterOfWrongTypeAnnotatedWithPersistenceUnit() { PersistenceAnnotationBeanPostProcessor babpp = new PersistenceAnnotationBeanPostProcessor(); try { @@ -559,6 +550,7 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT } } + @Test public void testSetterWithNoArgs() { PersistenceAnnotationBeanPostProcessor babpp = new PersistenceAnnotationBeanPostProcessor(); try { @@ -572,45 +564,37 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT @Ignore public void ignoreTestNoPropertiesPassedIn() { - mockEmf.createEntityManager(); - emfMc.setReturnValue(MockControl.createControl(EntityManager.class).getMock(), 1); - emfMc.replay(); + EntityManager mockEm = mock(EntityManager.class); + given(mockEmf.createEntityManager()).willReturn(mockEm); PersistenceAnnotationBeanPostProcessor babpp = new MockPersistenceAnnotationBeanPostProcessor(); DefaultPrivatePersistenceContextFieldExtended dppcf = new DefaultPrivatePersistenceContextFieldExtended(); babpp.postProcessAfterInstantiation(dppcf, "bean name does not matter"); assertNotNull(dppcf.em); - emfMc.verify(); } @Ignore public void ignoreTestPropertiesPassedIn() { Properties props = new Properties(); props.put("foo", "bar"); - mockEmf.createEntityManager(props); - emfMc.setReturnValue(MockControl.createControl(EntityManager.class).getMock(), 1); - emfMc.replay(); + EntityManager mockEm = mock(EntityManager.class); + given(mockEmf.createEntityManager(props)).willReturn(mockEm); PersistenceAnnotationBeanPostProcessor babpp = new MockPersistenceAnnotationBeanPostProcessor(); DefaultPrivatePersistenceContextFieldExtendedWithProps dppcf = new DefaultPrivatePersistenceContextFieldExtendedWithProps(); babpp.postProcessAfterInstantiation(dppcf, "bean name does not matter"); assertNotNull(dppcf.em); - emfMc.verify(); } + @Test public void testPropertiesForTransactionalEntityManager() { Properties props = new Properties(); props.put("foo", "bar"); - MockControl emC = MockControl.createControl(EntityManager.class); - EntityManager em = (EntityManager) emC.getMock(); - emfMc.expectAndReturn(mockEmf.createEntityManager(props), em); - emC.expectAndReturn(em.getDelegate(), new Object()); - emC.expectAndReturn(em.isOpen(), true); - em.close(); - - emfMc.replay(); - emC.replay(); + EntityManager em = mock(EntityManager.class); + given(mockEmf.createEntityManager(props)).willReturn(em); + given(em.getDelegate()).willReturn(new Object()); + given(em.isOpen()).willReturn(true); PersistenceAnnotationBeanPostProcessor babpp = new MockPersistenceAnnotationBeanPostProcessor(); DefaultPrivatePersistenceContextFieldWithProperties transactionalField = @@ -620,27 +604,22 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT assertNotNull(transactionalField.em); assertNotNull(transactionalField.em.getDelegate()); - emfMc.verify(); - emC.verify(); + verify(em).close(); } /** * Binds an EMF to the thread and tests if EM with different properties * generate new EMs or not. */ + @Test public void testPropertiesForSharedEntityManager1() { Properties props = new Properties(); props.put("foo", "bar"); - MockControl emC = MockControl.createControl(EntityManager.class); - EntityManager em = (EntityManager) emC.getMock(); + EntityManager em = mock(EntityManager.class); // only one call made - the first EM definition wins (in this case the one w/ the properties) - emfMc.expectAndReturn(mockEmf.createEntityManager(props), em); - emC.expectAndReturn(em.getDelegate(), new Object(), 2); - emC.expectAndReturn(em.isOpen(), true); - em.close(); - - emfMc.replay(); - emC.replay(); + given(mockEmf.createEntityManager(props)).willReturn(em); + given(em.getDelegate()).willReturn(new Object()); + given(em.isOpen()).willReturn(true); PersistenceAnnotationBeanPostProcessor babpp = new MockPersistenceAnnotationBeanPostProcessor(); DefaultPrivatePersistenceContextFieldWithProperties transactionalFieldWithProperties = @@ -658,27 +637,22 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT try { TransactionSynchronizationManager.bindResource(mockEmf, new EntityManagerHolder(em)); assertNotNull(transactionalField.em.getDelegate()); - emfMc.verify(); - emC.verify(); + verify(em).close(); } finally { TransactionSynchronizationManager.unbindResource(mockEmf); } } + @Test public void testPropertiesForSharedEntityManager2() { Properties props = new Properties(); props.put("foo", "bar"); - MockControl emC = MockControl.createControl(EntityManager.class); - EntityManager em = (EntityManager) emC.getMock(); + EntityManager em = mock(EntityManager.class); // only one call made - the first EM definition wins (in this case the one w/o the properties) - emfMc.expectAndReturn(mockEmf.createEntityManager(), em); - emC.expectAndReturn(em.getDelegate(), new Object(), 2); - emC.expectAndReturn(em.isOpen(), true); - em.close(); - - emfMc.replay(); - emC.replay(); + given(mockEmf.createEntityManager()).willReturn(em); + given(em.getDelegate()).willReturn(new Object(), 2); + given(em.isOpen()).willReturn(true); PersistenceAnnotationBeanPostProcessor babpp = new MockPersistenceAnnotationBeanPostProcessor(); DefaultPrivatePersistenceContextFieldWithProperties transactionalFieldWithProperties = @@ -696,8 +670,7 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT try { TransactionSynchronizationManager.bindResource(mockEmf, new EntityManagerHolder(em)); assertNotNull(transactionalFieldWithProperties.em.getDelegate()); - emfMc.verify(); - emC.verify(); + verify(em).close(); } finally { TransactionSynchronizationManager.unbindResource(mockEmf); @@ -899,5 +872,4 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT throw new IllegalStateException(); } } - } diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/support/SharedEntityManagerFactoryTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/support/SharedEntityManagerFactoryTests.java index 3296f1f258d..4a783c7d5d5 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/support/SharedEntityManagerFactoryTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/support/SharedEntityManagerFactoryTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,13 +16,18 @@ package org.springframework.orm.jpa.support; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; -import org.easymock.MockControl; -import static org.junit.Assert.*; import org.junit.Test; - import org.springframework.orm.jpa.EntityManagerHolder; import org.springframework.orm.jpa.EntityManagerProxy; import org.springframework.transaction.support.TransactionSynchronizationManager; @@ -30,6 +35,7 @@ import org.springframework.transaction.support.TransactionSynchronizationManager /** * @author Rod Johnson * @author Juergen Hoeller + * @author Phillip Webb */ public class SharedEntityManagerFactoryTests { @@ -37,22 +43,11 @@ public class SharedEntityManagerFactoryTests { public void testValidUsage() { Object o = new Object(); - MockControl emMc = MockControl.createControl(EntityManager.class); - EntityManager mockEm = (EntityManager) emMc.getMock(); + EntityManager mockEm = mock(EntityManager.class); + given(mockEm.isOpen()).willReturn(true); - mockEm.contains(o); - emMc.setReturnValue(false, 1); - - emMc.expectAndReturn(mockEm.isOpen(), true); - mockEm.close(); - emMc.setVoidCallable(1); - emMc.replay(); - - MockControl emfMc = MockControl.createControl(EntityManagerFactory.class); - EntityManagerFactory mockEmf = (EntityManagerFactory) emfMc.getMock(); - mockEmf.createEntityManager(); - emfMc.setReturnValue(mockEm, 1); - emfMc.replay(); + EntityManagerFactory mockEmf = mock(EntityManagerFactory.class); + given(mockEmf.createEntityManager()).willReturn(mockEm); SharedEntityManagerBean proxyFactoryBean = new SharedEntityManagerBean(); proxyFactoryBean.setEntityManagerFactory(mockEmf); @@ -83,10 +78,9 @@ public class SharedEntityManagerFactoryTests { TransactionSynchronizationManager.unbindResource(mockEmf); } - emfMc.verify(); - emMc.verify(); - assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); + verify(mockEm).contains(o); + verify(mockEm).close(); } }