Question

I have this NonStrictExpectation in my JUnit test case:

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

which works pretty fine and leads to the expected result. Now I had changed my code to this:

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

the second call mCurrencyDao.loadAll(lTomorrow); has to be executed without my NonStrictExpectations.

Is there an easy way to remove my previous defined NonStrictExpectations after I called mCurrencyDao.loadAll(lToday);?

Was it helpful?

Solution

You can use the mockit.Invocation class to invoke the original method that has been mocked by Deencapsulation.invoke(). The following code snippet delegates to original method on second method invocation.

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);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top