当前位置: 首页 > 知识库问答 >
问题:

如何使用JUnit Mockito验证检查未调用方法

淳于枫
2023-03-14
public class CountryProcess extends AbstractCountryProcess {

    private static final Logger log = LoggerFactory.getLogger(CountryProcessor.class);
    private static final Long MAX_FILE = 20l;

    @Override
    protected boolean processCountry(Region region, City city) {
        Long maxFile = region.getRequiredLongValue(SIZE);

        if (maxFile < MAX_FILE) {
            cntDao.addCountryLandMark(city);
        }
        else {
            log.warn("File size was big");
        }

        return true;
}
public class CountryProcessTest {

    @Rule
    public final JUnitRuleMockery context = new JUnitRuleMockery();
    private final CntDao cntDao = context.mock(CntDao.class);

    @Before
    public void setup() {
        Injector injector = Guice.createInjector(new AbstractModule() {
            @Override
            protected void configure() {
                bind(cntDao.class).toInstance(cntDao);
            }
        });
    }

    @Test
    public void shouldIgnoreIfFileSizeBiggerThanPermitted() {
        //some code to make it trigger ELSE statement above...
        verify(cntDao, never()).addCountryLandMark(anyString());
    }
}

但这将返回以下错误:

org.mockito.exceptions.misusing.NotaMockException:

传递给verify()的参数类型为$proxy4,不是mock!

共有1个答案

杜联
2023-03-14

您混合了两个模仿框架:

  • JMock-JunitRuleMockery
  • Mockito-验证方法

很明显,它们是互不相容的。您的验证调用看起来没问题,我相信只要它接收到用Mockito创建的模拟(使用Mockito.mock(cntdao.class))就会工作

 类似资料:
  • 问题内容: 我正在使用以下内容。 这是我的utils课 这是被测课程的要点: 这是测试: 以上测试失败。给出的验证模式为空,但根据代码,如果订购成功,则必须发送电子邮件。 问题答案: 如果您要嘲笑行为(类似),则实际上无需调用。也就是说,这是我重写测试方法的动力: 我分为四个部分,以更好地突出显示正在发生的事情: 1.变量 我选择在此处声明任何实例变量/方法参数/模拟协作者。如果它在多个测试中使用

  • 我在类中有一个签名为的方法。 我有一个调用方法的代码块: 如果我想测试databaseService.save(user)没有被调用,那么我如何用Mockito(3.3.3版)来做呢?

  • 问题内容: 不知道为什么这不起作用。我相信你们都知道我在这里想要达到的目标。 当脚本运行时,我得到一个参考,它引用了这段代码: 我正在使用codeigniter2框架,因此如果我的表单页面对某些人没有意义,则表示歉意。 new_page.php(相关位) 并在new_page.validation.js中 任何帮助将不胜感激!欢呼的家伙 问题答案: 可能会破坏插件的正常运行。根据文档, “布尔tr

  • 我正在浏览从iOS移植的Android应用程序,并试图找出我收到的任何警告的原因,并使我的代码与Android Studio的lint保持一致。 到目前为止,大多数“问题”都很容易修复,但是我收到了一个警告,其中包含一个特定的 Parse.com API函数,这让我感到困惑。 代码如下: 显示的警告是: 未经检查的调用findInbackground(FindCallback 当您允许自动完成为您

  • 问题内容: 假设我有一个带有两个我不在乎的方法的类,这称为… 下面的两个(仍然来自我的应用程序中的另一个类)都应该通过我的测试: 我不在乎哪个被调用,我只想调用两个变体之一。 在Mockito中,我通常可以执行以下操作: 要么: 是否有一种本地方式说“验证 一个或另一个 至少发生一次”? 还是我必须做一些粗略的事情: 问题答案: 您可以结合使用: