Während mit EasyMock meines Spring classes testen, ich auf dieses unten Szenario kam:
My Spring-Konfiguration von Spring das ursprünglichen DAO-Objekt konfigurierte nimmt component-scan
anstatt meine mock DAO Objekt.EasyMock - Frühling das ursprüngliche Objekt nimmt nicht das nachgeahmten Objekt
finden Sie meine Mock, AppContext und Testklasse unter:
ApplicationContxt-Test.xml
<context:annotation-config />
<context:component-scan base-package="com.test.testclasses"/>
<import resource="mockServices.xml" />
MockServices.xml
<bean class="org.easymock.EasyMock" factory-method="createMock"
id="codeDAO" primary="true" >
<constructor-arg value="com.test.testclasses.dao.MaintainCodeDAO" />
</bean>
JUnit-Klasse:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:ApplicationContxt-Test.xml")
public class MaintainCodeServiceImplTest {
@Autowired
private MaintainCodeDAO codeDAO;
@Autowired
private MaintainCodeService maintainCodeService;
@Before
public void setUp() {
EasyMock.reset(codeDAO);
}
@After
public void tearDown() {
EasyMock.reset(codeDAO);
}
@Test
public void shouldAutowireDependencies() {
assertNotNull(codeDAO);
assertNotNull(maintainCodeService);
}
@Test
public void getProcedureByCode_success() throws Exception {
MaintainCodeVO maintainCodeVO = new MaintainCodeVO();
EasyMock.expect(codeDAO.searchProcedureCode(isA(String.class))).andReturn(maintainCodeVO);
EasyMock.replay(codeDAO);
MaintainCodeBO maintainCodeResult = maintainCodeService.getProcedureByCode("test");
EasyMock.verify(codeDAO);
codeDAO.searchProcedureCode("test");
assertNotNull(maintainCodeResult);
EasyMock.reset(codeDAO);
}
}
Er Re spot ich codeDAO
und während des Testens der Serviceklasse, anstelle der Mock codeDAO
, wird das ursprüngliche DAO-Objekt autowired und EasyMock.verify()
wirft Ausnahme. Ich weiß nicht, was das Problem ist. Gibt es ein Problem mit der obigen Konfiguration?
Ja können wir das tun .. Wie Sie sagten, es sieht zu ungeschickt aus. Ich muss Komponententests für mehr als 100 Serviceklassen schreiben und das scheint keine gute Idee zu sein. Ich habe das schon vorher gemacht und weiß nicht, warum es jetzt nicht funktioniert. – Arun
@ArunRaj Ich bevorzuge Injektionen von EasyMock/Mockito DI. Kein Frühling - arbeitet schneller, sieht besser aus, weniger Abhängigkeiten. – kan