2014-04-28 138 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);