【问题标题】:Mockito object always giving a NullPointer exceptionMockito 对象总是给出 NullPointer 异常
【发布时间】:2021-11-05 18:55:12
【问题描述】:

这是我要测试的类。

open class Foo(bar :Bar){
   fun someMethod() = bar.anotherMethod()
}

而且我有一个构建器类来获取 Foo 模拟实例,因为 Mockito 无法模拟构造函数参数。

open class FooBuilder{
   fun makeFoo(bar:Bar) = Foo(bar)
}

这是我制作模拟对象并进行验证的方法。

var fooBuilderMock = mock(FooBuilder::class)
var barMock = mock(Bar::class)
var fooMock = mock(Foo::class) 
Mockito.`when`(fooBuilderMock.makeFoo(barMock)).thenReturn(fooMock)
fooMock.someMethod()
Mockito.verify(barMock, Mockito.times(1)).anotherMethod()

barMock 对象出现空指针异常。

【问题讨论】:

    标签: unit-testing kotlin mocking mockito


    【解决方案1】:

    不要使用 Builder,没有必要。此外,不要模拟您要测试的课程。如果你这样做了,你的测试就没有意义了。

    class FooTest {
    
        private val barMock = mock(Bar::class)
        private lateinit var foo: Foo
    
        @BeforeEach
        fun setUp() {
            MockitoAnnotations.initMocks(this)
    
            foo = Foo(barMock)
        }
    
        @Test
        fun `Your test name`() {
            // Arrange
            Mockito.`when`(barMock.anotherMethod()).thenReturn(// whatever it should return)
    
            // Act
            fooMock.someMethod()
    
            // Assert
            Mockito.verify(barMock, Mockito.times(1)).anotherMethod()
        }
    }
    

    作为旁注,请考虑查看 mockk 并使用它来代替 Mockito。它是在 kotlin 中实现的,因此从第一天开始就支持它。有了它,您的测试看起来会很相似,但更多地遵循 kotlin“风格”:

    class FooTest {
    
        @MockK
        private lateinit var barMock = mock(Bar::class)
        private lateinit var foo: Foo
    
        @BeforeEach
        fun setUp() {
            MockitoAnnotations.initMocks(this)
    
            foo = Foo(barMock)
        }
    
        @Test
        fun `Your test name`() {
            // Arrange
            every { barMock.anotherMethod() } returns //whatever it should return
    
            // Act
            foo.someMethod()
    
            // Assert
            verify(exactly = 1) { barMock.anotherMethod() }
        }
    }
    

    【讨论】:

    • 非常感谢!似乎 mockk 库也很有用
    猜你喜欢
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 2019-04-11
    相关资源
    最近更新 更多