這是我要測驗的課程。
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物件上收到空指標例外。
uj5u.com熱心網友回復:
不要使用 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() }
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/352795.html
