删除之前定义的NonStrictExpectation

时间:2014-04-28 12:27:07

标签: java junit jmockit

我在JUnit测试用例中有这个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的情况下执行。

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

1 个答案:

答案 0 :(得分: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);
相关问题