jmockit Mock级联操作
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对象的方法返回再进行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();
String yoursql =
""
;
//可以发现,我们成功地对entityManager.createNativeQuery方法返回值进行了Mock
Assert.assertTrue(entityManager.createNativeQuery(yoursql).getResultList().size() ==
2
);
}