是新來的Junit Testing..I有一種情況,JUnit進行測試:未能測試的TransactionStatus
@Service
public class MainWorkerClass {
@Autowired
@Qualifier("txnManager")
private HibernateTransactionManager txnManager;
public void task() {
.....
TransactionStatus txnStatus = txnManager.getTransaction(new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRES_NEW));
.....
}
}
我的JUnit類的失敗,getTransaction(),其中logger.isDebugEnabled()拋出NPE。 所以,我沒有備用像下面,
public class JnuitTestTxnMgr implements PlatformTransactionManager{
@Override
public void commit(TransactionStatus arg0) throws TransactionException {}
@Override
public TransactionStatus getTransaction(TransactionDefinition arg0) throws TransactionException {
return null;
}
@Override
public void rollback(TransactionStatus arg0) throws TransactionException {}
}
和我的JUnit類是喜歡,
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = {DBConfig.class})
public class MainWorkerClassTest {
@Mock
JnuitTestTxnMgr jnuitTransactionManagerOTP = new JnuitTestTxnMgr();
@InjectMocks
MainWorkerClass worker = new MainWorkerClass();
@Test
public void testTask() throws Exception{
worker.task();
}
不過幸運的是,注入的模擬對象類型JnuitTestTxnMgr和類的被測試具有HibernateTransactionManager來未接受了一個。 有沒有任何解決方法,我的替代解決方案或任何解決方案來測試我的原始類。
注意我不能改變我的罐子,現在用spring4 & hibernate4
這就是爲什麼你想使用接口作爲自動裝配字段的類型而不是實現,所以你將能夠輕鬆地嘲笑它們。 –
謝謝,是通過自動裝配接口,它的工作正常。但是這種情況下還有其他方法嗎?因爲我現在不想在服務類中進行修改。 – RajeysGS