我在嘗試使用Spring對Maven多模塊項目進行單元測試時遇到了問題。如何對Maven多模塊Spring應用程序進行單元測試?
我有4個模塊:
application-core
application-data
application-service
application-web
這是我的測試,其application-core
模塊:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:/config/application-context.xml")
public class TicketTest {
@Mock
ITicketDAO ticketDAO;
@Autowired
@InjectMocks
ITicketCore ticketCore;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testRegisterTicket_Ticket_NotUsed_isValid() {
Long ticketNumber = 0L;
when(ticketDAO.getTicket(anyLong())).thenReturn(null);
final boolean isValidTicket = ticketCore.validateTicket(ticketNumber);
assertTrue(isValidTicket);
}
}
這裏是實現:
@Component
@Scope("prototype")
public class TicketCore implements ITicketCore{
private ITicketDAO ticketDao;
@Autowired
public TicketCore(ITicketDAO ticketDao) {
this.ticketDao = ticketDao;
}
@Override
public boolean validateTicket(Long ticketNumber) {
ITicket ticket = ticketDao.getTicket(ticketNumber);
return ticket != null;
}
}
接口:
的ITicketDAO
其模塊
實現:
@Service
public class TicketDAO implements ITicketDAO {
@Override
public ITicket getTicket(Long ticketNumber) {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
}
我有問題,測試這個代碼,因爲上下文沒有找到的ITicketDAO
實施。這似乎很明顯,因爲在測試運行時,JUnit不關心在類路徑中放入「其他模塊」。
由於顯而易見的原因,彈簧投擲BeanCreationException
。
我說得對不對?
所以我想測試我的項目,沒有春季進入測試的方式。
我該怎麼做才能讓我的測試運行沒有任何問題?
我創建虛擬類在test文件夾/包,和它的作品,但...
我最終會在我的application-core
模塊的測試文件夾中所有的外部實現。
還有更好的辦法嗎?
在此先感謝。
UPDATE:
application-data
application-service
application-web
他們都依賴於application-core
。春季成功注入TicketCore
(application-core
)。我想要的是給彈簧「一些東西」(一個虛擬的類)注入ITicketDAO
只是爲了運行測試。
<beans>
<context:component-scan base-package="ve.gov.imat.transimat" />
<context:annotation-config />
<aop:config proxy-target-class="true" />
</beans>
能給我這個部分的一個例子「無論是手動你的bean註冊到測試環境或地方的模擬定義在SRC的@Configuration /測試。「,請。這意味着我需要對「ITicketDAO」進行「虛擬類」實現?我也更新了這個問題。 –