当前位置: 首页 > 面试题库 >

Java 使用Mockito测试抽象类

潘弘博
2023-03-14
问题内容

我想测试一个抽象类。当然,我可以手动编写一个从类继承的模拟。

我可以使用模拟框架(我正在使用Mockito)来执行此操作,而不是手工制作模拟吗?怎么样?


问题答案:

以下建议让你在不创建“真实”子类的情况下测试抽象类-Mock 是子类。

使用Mockito.mock(My.class, Mockito.CALLS_REAL_METHODS),然后模拟所有被调用的抽象方法。

例:

public abstract class My {
  public Result methodUnderTest() { ... }
  protected abstract void methodIDontCareAbout();
}

public class MyTest {
    @Test
    public void shouldFailOnNullIdentifiers() {
        My my = Mockito.mock(My.class, Mockito.CALLS_REAL_METHODS);
        Assert.assertSomething(my.methodUnderTest());
    }
}

注意:此方法的好处是,你不具备实现的抽象方法,只要他们永远不会被调用

在我看来,这比使用间谍更整洁,因为间谍需要一个实例,这意味着你必须创建抽象类的可实例化子类。



 类似资料:
  • 问题内容: 我是第一次使用JUnit进行Java测试。我必须使用Java,并且想使用单元测试。 我的问题是:我有一个带有一些抽象方法的抽象类。但是有些方法不是抽象的。如何使用JUnit测试此类?示例代码(非常简单): 我要测试并运行。 在“JUnit常见问题解答”部分中,我找到了此链接,但我不理解作者想在此示例中说些什么。这行代码是什么意思? 问题答案: 如果您没有该类的具体实现,并且方法不是测试

  • 我有下面一个班的方法。 使用mockito的junit测试用例将提供100%的代码覆盖率。

  • 问题内容: 我有一个旧类,其中包含用于实例化LoginContext()的new()调用: 我想使用Mockito测试类来模拟LoginContext,因为它要求在实例化之前设置JAAS安全性,但是我不确定如何在不更改login()方法以外部化LoginContext的情况下进行此操作。是否可以使用Mockito模拟LoginContext类? 问题答案: 对于将来,我会推荐伊兰·哈雷尔(Eran

  • 问题内容: 我正在寻找在抽象基类中定义的测试方法的方法/最佳实践。我可以直接想到的一件事是对基类的所有具体子类执行测试,但这有时显得有些多余。 考虑以下示例: 是否可以在不进行任何子类化的情况下进行测试? 问题答案: 正如lunaryon所说,这是不可能的。包含抽象方法的ABC的真正目的是,它们不能像声明的那样实例化。 但是,可以创建一个对ABC进行内省的实用函数,并动态创建一个虚拟的非抽象类。可

  • 问题内容: 我想使用Mockito测试具有增强功能的Java方法。问题是,当我不知道如何设定增强功能的期望时。以下代码是从嘲笑谷歌组中的一个未解决的问题得到的: for循环内的代码永远不会执行。为迭代器设置期望值不起作用,因为for的Java增强功能在内部未使用列表迭代器。为方法设置期望也不会,因为增强的实现似乎也不会调用列表的方法。 任何帮助都感激不尽。 问题答案: 模拟迭代器对我有用。参见下面

  • 我想测试一个返回可选客户机的方法。 我一直在跟踪这个链接Mockito错误,方法返回可选的