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

如何在单元测试中模拟泛型类?

应俭
2023-03-14
class MyTest {

  val mockCollection: MongoCollection<Document> = mock(MongoCollection<Document>::class.java)

}

我还尝试将模拟转换为文档,如下所示

val mockCollection: MongoCollection<Document> = mock(MongoCollection::class.java) as MongoCollection<Document>

但这会在代码实现内部访问MongoCollection时产生NullpointerException异常。

这两个我都试过了

    null

我厌倦了用java编写相同的测试,并在其中进行泛型的转换。

MongoCollection<Document> mockCollection = (MongoCollection<Document>) mock(MongoCollection.class);

有人在Kotlin有嘲弄泛型类的经验吗?

共有1个答案

羊昊苍
2023-03-14

我给你写了下面这个例子:

interface Mosi<T> {
    fun mos(): T
}

那么下面的三个代码段都工作用于测试并通过测试:

class ExampleUnitTest {

    val mosi = Mockito.mock(Mosi::class.java)
    @Test
    fun test() {
        `when`(mosi.mos()).thenReturn("Mosi")
        assertEquals(mosi.mos(), "Mosi")
    }
}
class ExampleUnitTest {

    val mosi = Mockito.mock(Mosi::class.java) as Mosi<String>
    @Test
    fun test() {
        `when`(mosi.mos()).thenReturn("Mosi")
        assertEquals(mosi.mos(), "Mosi")
    }
}
class ExampleUnitTest {

    val mosi = mock<Mosi<String>> {
        on { mos() }
            .thenReturn("Mosi")
    }
    @Test
    fun test() {
        assertEquals(mosi.mos(), "Mosi")
    }
}

如果您得到npe问题出在其他地方,也许提供更多的代码会有所帮助!

 类似资料:
  • 问题内容: 我正在使用RestTemplate 方法发布到端点。在我的测试文件中,我正在测试POST方法。但是用我目前的测试,我得到了POST请求。在测试文件中发出POST请求时,我需要模拟API的帮助 这是我的主文件 这是我的测试文件 问题答案: 您正在测试DataTestRepo类内部的逻辑,因此您不应模拟它。RestTemplate是DataTestRepo内部的一个依赖项,因此这正是您需要

  • 我在尝试包装我的代码以用于单元测试时遇到了一些问题。问题是。我有接口IHttpHandler: 现在很明显,我将在Connection类中有一些方法,这些方法将从my后端检索数据(JSON)。但是,我想为这个类编写单元测试,显然我不想编写针对真实后端的测试,而是一个被嘲弄的测试。我曾尝试谷歌一个很好的答案,但没有很大的成功。我以前可以并且曾经使用过Moq来模拟,但是从来没有在像HttpClient

  • 问题内容: 我刚开始使用Node,现在正在编写一些单元测试。对于前几个函数,我可以正常运行,但是现在我碰到了一个包含其中的函数。我的函数的简化版本如下所示: 我尝试使用基本节点断言测试库进行测试: 由于执行此操作的时间(以及结果)总是不同的,因此它将始终失败。 在Python中,我可以设置模拟类和对象。有没有一种方法可以在Node中解决此问题而无需将moment.utc()作为函数的参数? 问题答

  • 所以我有三个类:A、B、C。我需要为类编写单元测试。 因此,C是一种重要的资源(如JDBC或ssh会话)。当然,我在嘲笑C。如何模拟B。想象一下,B有许多扩展它的子类。 我的主要问题是A正在调用super。(...) 。我不想仅仅为了测试而将方法注入到A中。对我来说,这是个糟糕的设计。有没有办法嘲笑父母? 例如,我不能执行类MockB扩展B{…} 然后尝试

  • 问题内容: 我正在为启动a 并使用返回的诺言执行一些逻辑的控制器编写单元测试。我可以测试触发$ modal的父控制器,但是我一生无法弄清楚如何模拟成功的诺言。 我尝试了多种方法,包括使用和强制履行承诺。但是,我得到的最接近的结果是与本 SO帖子中的最后一个答案相似的东西。 我已经在“旧的” 模式中看到了几次这样的问题。在“新” 模式下,我找不到太多的方法。 一些指针将不胜感激。 为了说明问题,我使

  • 我想测试一些错误处理逻辑,所以我想在我的单元测试中模拟特定的异常类型。我正在嘲笑对boto3的调用,但是我想让这个mock引发一个异常。我正在测试的代码遵循以下模式: 我已经创建了一个unittest模拟,但我不知道如何使它引发异常,因为这个参数NotFound exception。我尝试了以下方法,但不起作用,因为在计算except子句时,它得到了“exceptions必须派生自基类”: 如何在