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);?

有帮助吗?

解决方案

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);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top