मुझे अपने डीएओ और सेवाओं का परीक्षण करने में कोई समस्या नहीं है, लेकिन जब मैं INSERT
एस या UPDATE
एस का परीक्षण करता हूं तो मैं लेनदेन को रोलबैक करना चाहता हूं और अपना डेटाबेस प्रभावित नहीं करना चाहता हूं।जुनीट में वसंत के साथ सेवाओं का परीक्षण करते समय डेटाबेस लेनदेन को कैसे रोलबैक करें?
मैं लेनदेन प्रबंधित करने के लिए अपनी सेवाओं के अंदर @Transactional
का उपयोग कर रहा हूं। मैं जानना चाहता हूं, क्या यह जानना संभव है कि कोई लेनदेन ठीक होगा, लेकिन डेटाबेस को बदलने से रोकने के लिए इसे रोलबैक करें?
यह मेरा टेस्ट है:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:/META-INF/spring.cfg.xml")
@TransactionConfiguration(defaultRollback=true)
public class MyServiceTest extends AbstractJUnit38SpringContextTests {
@Autowired
private MyService myService;
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Test
public void testInsert(){
long id = myService.addPerson("JUNIT");
assertNotNull(id);
if(id < 1){
fail();
}
}
}
समस्या यह है कि इस परीक्षण असफल हो जायेगी क्योंकि लेनदेन rollbacked किया गया था, लेकिन डालने ठीक है! यदि मैं @TransactionConfiguration(defaultRollback=true)
हटा देता हूं तो परीक्षा पास हो जाती है लेकिन डेटाबेस में एक नया रिकॉर्ड डाला जाएगा।
@Test
@Transactional
@Rollback(true)
public void testInsert(){
long id = myService.addPerson("JUNIT");
assertNotNull(id);
if(id < 1){
fail();
}
}
अब सही तरीके से परीक्षा का परीक्षण कर सकते हैं, लेकिन रोलबैक को अनदेखा कर दिया गया है और रिकॉर्ड डेटाबेस में डाला गया है। मैंने स्पष्ट रूप से @Transactional
के साथ myService के अंदर विधि addPerson()
को एनोटेट किया है। रोलबैक को अनदेखा क्यों किया जा रहा है?
अच्छा प्रश्न +1 :-) –