Unit testing Spring transaction management –> i.e. commit & rollback scenarios as shown below. On a separate post, will do an integration test for the Spring transaction manager. The test class defines the transactional boundaries. Transaction Commit scenario
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
package com.myapp.dao; import java.util.List; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.transaction.AfterTransaction; import org.springframework.test.context.transaction.BeforeTransaction; import org.springframework.test.context.transaction.TransactionConfiguration; import org.springframework.transaction.annotation.Transactional; import com.myapp.config.AppConfig; import com.myapp.config.AppTestConfig; import com.myapp.model.EventControl; import com.myapp.model.common.MyAppType; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = { AppConfig.class, AppTestConfig.class }) @TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false) public class EventControlDaoTxnCommitTest extends AbstractTransactionalJUnit4SpringContextTests { @Autowired EventControlDao eventControlDao; private static final String USER_ID = "AYYYY"; private static final String EVENT_DATE = "20/10/2015"; @BeforeTransaction public void beforeTransaction() { testEventControl(0); } @AfterTransaction public void afterTransaction() { testEventControl(1); } @Test @Transactional public void testEventControlCommit() { eventControlDao.create(getFsEventControl(USER_ID, EVENT_DATE)); } private void testEventControl(int count) { List<EventControl> listEventControl = eventControlDao.findByValue(getPendingEventControl()); Assert.assertEquals(count, listEventControl.size()); } private EventControl getFsEventControl(String client, String eventKey) { EventControl fsEventControl = new EventControl(); fsEventControl.setEventType(EventControl.EventType.BASIC); fsEventControl.setEventKey(EventControl.EventKey.USER_DATE); fsEventControl.setEventValue1(client); fsEventControl.setEventValue2(EVENT_DATE); return fsEventControl; } private EventControl getPendingEventControl() { EventControl ec = new EventControl(); ec.setEventType(EventControl.EventType.BASIC); ec.setEventValue1(USER_ID); ec.setEventValue2(EVENT_DATE); ec.setEventStatus(EventControl.EventStatus.PENDING); return ec; } } |
Transaction…