Ich habe eine etwas komplizierte Prozedur, die ich versuche zu testen. getDatesMi ruft eine Methode in derselben Klasse auf. Diese Methode führt einen Aufruf zu einer Schnittstellenmethode aus, die das Ergebnis einer Abfrage, die in einem MarketLimits-Typ umgewandelt wird, zurückgibt.Wie Mock-Klassen, die in der Testklasse mit EasyMock instanziiert werden?
Ich benutze EasyMock und Junit.
Meine Fragen sind:
- wie kann ich testen getSqlMapClientTemplate() queryForObject.?
- Wie verspotten ich, dass das Ergebnis getSqlMapClientTemplate(). QueryForObject zu MarketLimits gegossen
Ich bin neu in Java und EasyMock so vielleicht die Antwort obviuos aber jede Hilfe sehr geschätzt wird.
Ich bin derzeit immer Nullpointer auf subDates.greaterThenOne()
Schnittstelle für MyServiceDao
import com.foo.bar.domain.MarketLimits;
public interface MyServiceDao {
public MarketLimits getDates(long orgId) throws DataAccessException;
}
Klasse, die MyServiceDao implementiert
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import com.foo.bar.domain.MarketLimits;
public class myServiceImpl implements MyServiceDao{
@Override
public MarketLimits getDates(long orgId) throws DataAccessException {
return (MarketLimits) getSqlMapClientTemplate().queryForObject("retrieveLimits", orgId);
}
}
Hauptklasse zu test
import com.foo.bar.dao.MyServiceDao;
public class myServiceImpl extends reports implements myService {
@Autowired
private MyServiceDao myServiceDao;
public String getDatesMi() throws Exception {
MarketLimits subDates = getDates(23);
System.out.print(subDates); // this prints out null
if(subDates.greaterThenOne()){
// do some things
}
return "result"
}
@Override
public MarketLimits getDates(long orgId) {
return myServiceDao.getDates(orgId);
}
public setMyServiceDao(MyServiceDao myServiceDao){
this.myServiceDao = myServiceDao
}
}
MyTest
@RunWith(EasyMockRunner.class)
public class myServiceImplTest {
@org.easymock.Mock
private MyServiceDao myServiceDao;
@TestSubject
private MyServiceImpl myServiceImpl = new MyServiceImpl();
@Test
public void testGetDatesMi() throws Exception {
MarketLimits limits = new MarketLimits();
limits.greaterThenOne(true);
expect(myServiceDao.getDates()).andReturn(limits);
replay(myServiceDao);
myServiceImpl.getDatesMi(12);
}
}
UPDATE 1
Für einige der EasyMock Instanz myServiceDao Grund jedoch erzeugt wurde, als ein Verfahren, war rief die Ea an syMock-Instanz würde NULL zurückgeben. Meine Lösung dazu war, eine Setter-Methode auf myServiceImpl zu erstellen, um meinen myServiceDao-Mock zu setzen. Dies war ein Vorschlag von Deendayal Garg
UPDATE 2
Stellt sich heraus, ich brauche keinen Setter haben =) ich den Titel, um das eigentliche Problem zu reflektieren änderte es gegenüberstand.
Ich aktualisierte die Frage mit dem Null-Fehler passiert – mattwilsn