from Jmockit 中文网 http://jmockit.cn/showArticle.htm?channel=4&id=33
//级联Mock:对Mock对象的方法返回再进行Mock public class CascadingMockTest { @Test public void testCascading() { //下面以Mock EntityManager.createNativeQuery的返回对象为例 这个新版本不能这么玩了 EntityManager entityManager = new MockUp<EntityManager>() { @Mock public Query createNativeQuery(String sqlString) { //返回一个自定义Query的匿名内部类就可以 return new Query() { @Override public List getResultList() { //在这里书写你的Mock逻辑, // mock的返回数据 List<Object> mockResult = new ArrayList<Object>(); mockResult.add(new Object()); mockResult.add(new Object()); return mockResult; } @Override public Object getSingleResult() { // TODO Auto-generated method stub return null; } @Override public int executeUpdate() { // TODO Auto-generated method stub return 0; } @Override public Query setMaxResults(int maxResult) { // TODO Auto-generated method stub return null; } @Override public Query setFirstResult(int startPosition) { // TODO Auto-generated method stub return null; } @Override public Query setHint(String hintName, Object value) { // TODO Auto-generated method stub return null; } @Override public Query setParameter(String name, Object value) { // TODO Auto-generated method stub return null; } @Override public Query setParameter(String name, Date value, TemporalType temporalType) { // TODO Auto-generated method stub return null; } @Override public Query setParameter(String name, Calendar value, TemporalType temporalType) { // TODO Auto-generated method stub return null; } @Override public Query setParameter(int position, Object value) { // TODO Auto-generated method stub return null; } @Override public Query setParameter(int position, Date value, TemporalType temporalType) { // TODO Auto-generated method stub return null; } @Override public Query setParameter(int position, Calendar value, TemporalType temporalType) { // TODO Auto-generated method stub return null; } @Override public Query setFlushMode(FlushModeType flushMode) { // TODO Auto-generated method stub return null; } }; } // 下面的getMockInstance()在新版本可能被删除,还有上面的把MockUp赋给实例在新版本也没有 }.getMockInstance(); String yoursql = ""; //可以发现,我们成功地对entityManager.createNativeQuery方法返回值进行了Mock Assert.assertTrue(entityManager.createNativeQuery(yoursql).getResultList().size() == 2); }
//级联Mock:对Mock对象的方法返回再进行Mockpublic class CascadingMockTest {
@Test
public void testCascading() {
//下面以Mock EntityManager.createNativeQuery的返回对象为例
EntityManager entityManager = new MockUp<EntityManager>() {
@Mock
public Query createNativeQuery(String sqlString) {
//返回一个自定义Query的匿名内部类就可以
return new Query() {
@Override
public List getResultList() {
//在这里书写你的Mock逻辑,
// mock的返回数据
List<Object> mockResult = new ArrayList<Object>();
mockResult.add(new Object());
mockResult.add(new Object());
return mockResult;
}
@Override
public Object getSingleResult() {
// TODO Auto-generated method stub
return null;
}
@Override
public int executeUpdate() {
// TODO Auto-generated method stub
return 0;
}
@Override
public Query setMaxResults(int maxResult) {
// TODO Auto-generated method stub
return null;
}
@Override
public Query setFirstResult(int startPosition) {
// TODO Auto-generated method stub
return null;
}
@Override
public Query setHint(String hintName, Object value) {
// TODO Auto-generated method stub
return null;
}
@Override
public Query setParameter(String name, Object value) {
// TODO Auto-generated method stub
return null;
}
@Override
public Query setParameter(String name, Date value, TemporalType temporalType) {
// TODO Auto-generated method stub
return null;
}
@Override
public Query setParameter(String name, Calendar value, TemporalType temporalType) {
// TODO Auto-generated method stub
return null;
}
@Override
public Query setParameter(int position, Object value) {
// TODO Auto-generated method stub
return null;
}
@Override
public Query setParameter(int position, Date value, TemporalType temporalType) {
// TODO Auto-generated method stub
return null;
}
@Override
public Query setParameter(int position, Calendar value, TemporalType temporalType) {
// TODO Auto-generated method stub
return null;
}
@Override
public Query setFlushMode(FlushModeType flushMode) {
// TODO Auto-generated method stub
return null;
}
};
}
}.getMockInstance();
String yoursql = "";
//可以发现,我们成功地对entityManager.createNativeQuery方法返回值进行了Mock
Assert.assertTrue(entityManager.createNativeQuery(yoursql).getResultList().size() == 2);
}