C:\devel\mocks\src\com\ociweb\jnb\ex2\TestTransactionManagerImpl.java

1    package com.ociweb.jnb.ex2; 
2     
3    import junit.framework.TestCase; 
4     
5    import java.sql.Connection; 
6    import java.sql.SQLException; 
7     
8    public class TestTransactionManagerImpl extends TestCase { 
9        private TransactionManagerImpl manager; 
10       private MockConnection mockConnection; 
11       private MockConnectionFactory mockConnectionFactory; 
12    
13       public void setUp() { 
14           mockConnection = new MockConnection(); 
15           mockConnectionFactory = new MockConnectionFactory(); 
16           mockConnectionFactory.createConnectionReturn = mockConnection; 
17       } 
18    
19       public TestTransactionManagerImpl(String name) { 
20           super(name); 
21       } 
22    
23       public void testTransactionManagerInitialization() { 
24           manager = new TransactionManagerImpl(mockConnectionFactory); 
25           assertTrue(mockConnectionFactory.createConnectionCalled); 
26           assertTrue(mockConnection.setAutoCommitCalled); 
27           assertEquals(false, mockConnection.setAutoCommitAutoCommit); 
28       } 
29    
30       public void testCommitSuccess() throws Exception { 
31           manager = new TransactionManagerImpl(mockConnectionFactory); 
32           manager.commit(); 
33           assertTrue(mockConnection.commitCalled); 
34       } 
35    
36       public void testCommitFailure() throws  Exception { 
37           mockConnection.commitException = new SQLException("Could not commit!"); 
38           manager = new TransactionManagerImpl(mockConnectionFactory); 
39           try { 
40               manager.commit(); 
41               fail("The TransactionManager should wrap an SQLException in a TransactionException"); 
42           } catch (TransactionException e) { 
43               assertTrue(mockConnection.commitCalled); 
44               assertTrue(e.getCause() instanceof SQLException); 
45               assertEquals("Could not commit!", e.getCause().getMessage()); 
46           } 
47       } 
48    
49       public void testRollbackSuccess() throws  Exception { 
50           manager = new TransactionManagerImpl(mockConnectionFactory); 
51           manager.rollback(); 
52           assertTrue(mockConnection.rollbackCalled); 
53       } 
54    
55       public void testRollbackFailure() throws  Exception { 
56           mockConnection.rollbackException = new SQLException("SQL Failure!"); 
57           manager = new TransactionManagerImpl(mockConnectionFactory); 
58           try { 
59               manager.rollback(); 
60               fail("The TransactionManager should wrap an SQLException in a TransactionException"); 
61           } catch (TransactionException e) { 
62               assertTrue(mockConnection.rollbackCalled); 
63               assertTrue(e.getCause() instanceof SQLException); 
64               assertEquals("SQL Failure!", e.getCause().getMessage()); 
65           } 
66       } 
67    
68       public void testConnectionProxy() throws  Exception { 
69           manager = new TransactionManagerImpl(mockConnectionFactory); 
70           Connection proxy = manager.getConnection(); 
71           assertFalse("The connection commit has not been called yet", mockConnection.commitCalled); 
72           proxy.commit(); 
73           assertFalse("The connection commit has still not been called", mockConnection.commitCalled); 
74           assertFalse("The connection rollback has not been called yet", mockConnection.rollbackCalled); 
75           proxy.rollback(); 
76           assertFalse("The connection rollback has still not been called", mockConnection.rollbackCalled); 
77           assertFalse("The connection close has not been called", mockConnection.closeCalled); 
78           proxy.close(); 
79           assertTrue("The proxy caused the real connection.close() method to be called", mockConnection.closeCalled); 
80       } 
81   } 
82