をテストするために失敗しました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のクラス、シナリオを持っているAM、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を持っています受け入れられたもの。 私の元のクラスをテストするための代替ソリューションまたはその解決策の回避策はありますか?私は私のjarファイルを変更することはできません
注意、spring4 & hibernate4
なぜあなたは簡単に模擬することができるように、あなたは実装がではなく、autowiredフィールドのタイプとしてインターフェイスを使いたいのですか? –
ありがとう、ええ、インターフェイスをautowiringして、うまく動作します。しかし、このシナリオのための他の方法はありますか?私は今サービスクラスの変更をしたくないからです。 – RajeysGS