2014-04-28 118 views
0

我在我的JUnit测试情况下,该NonStrictExpectation:删除NonStrictExpectation以前

new NonStrictExpectations(mCurrencyDao) { 
     { 
     invoke(mCurrencyDao, "readSqlQuery", withAny(String.class)); 
     result = prepareTestSQL(pAllKeysForTest); 
     times = 1; 
     } 
    }; 
    mCurrencyDao.loadAll(lToday); 

它工作得很好,导致预期的结果。 现在我改变了我的代码如下:

new NonStrictExpectations(mCurrencyDao) { 
     { 
     invoke(mCurrencyDao, "readSqlQuery", withAny(String.class)); 
     result = prepareTestSQL(pAllKeysForTest); 
     times = 1; 
     } 
    }; 
    mCurrencyDao.loadAll(lToday); 
    mCurrencyDao.loadAll(lTomorrow); 

第二个电话mCurrencyDao.loadAll(lTomorrow);有没有我NonStrictExpectations执行。

在我打电话给mCurrencyDao.loadAll(lToday);之后,是否有简单的方法可以删除我先前定义的NonStrictExpectations

回答

1

您可以使用mockit.Invocation类来调用Deencapsulation.invoke()嘲笑的原始方法。以下代码片段在第二个方法调用时委托给原始方法。

new NonStrictExpectations(mCurrencyDao) { 
    { 
     invoke(mCurrencyDao, "readSqlQuery", withAny(String.class)); 
     result = new Delegate<String>() { 
      @SuppressWarnings("unused") 
      String delegate(Invocation invocation) { 
       if (invocation.getInvocationIndex() == 0) { 
        return prepareTestSQL(pAllKeysForTest); 
       } else { 
        return invocation.proceed(); 
       } 
      } 
     }; 
     times = 2; 
    } 
}; 
mCurrencyDao.loadAll(lToday); 
mCurrencyDao.loadAll(lTomorrow);