我寫在彈簧項目TestNG的測試案例和使用jmockit來模擬依賴。我遇到一個問題,就是我不能使用Deencapsulation.setField設置依賴於Spring管理對象包含一個@Transactional方法,錯誤的是:如何注入由jmockit嘲笑對象與方法@Transactional彈簧管理對象?
類爪哇發現的名字「dataLogManager」的任何實例字段.lang.reflect.Proxy
這裏列出我的示例代碼,
測試用例:
public class QueueManagerTest extends AbstractTestNGSpringContextTests {
@Autowired
private QueueManager queueManager;
@Autowired
private ApplicationContext context;
@Autowired
private TransInfoManager transInfoManager;
@Autowired
private Generator generator;
@Autowired
private MessageDTOFactoryBean messageDTOFactoryBean;
@Test(description="單元測試:寫入一筆Data資料,非邊界情況下(無待處理筆數)")
public void writeControlMessage(
@Mocked final TransInfoManager transInfoManager,
@Mocked final DataManager dataManager,
@Mocked final DataLogManager dataLogManager
) {
....
Deencapsulation.setField(queueManager, "dataLogManager", dataLogManager);
Deencapsulation.setField(queueManager, "dataManager", dataManager);
Deencapsulation.setField(queueManager, "transInfoManager", transInfoManager);
....
}
}
服務:
@Service
public interface QueueManager {
@Transactional
MessageDTO putDataIntoQueue(MessageDTO message);
}
任何人都知道如何解決這個問題?謝謝。