是新来的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