Pen*_*gin 7 unit-testing scala mockito scalatest
我有一个简单的类,自然分为两部分,所以我重构为
class Refactored extends PartOne with PartTwo
Run Code Online (Sandbox Code Playgroud)
然后单元测试开始失败.
下面是尝试重现问题.所有三个示例的功能都相同,但第三个测试失败并显示NullPointerException.什么是使用导致mockito问题的特征?
编辑: Mockito是Scala的最佳选择吗?我使用的是错误的工具吗?
import org.scalatest.junit.JUnitSuite
import org.scalatest.mock.MockitoSugar
import org.mockito.Mockito.when
import org.junit.Test
import org.junit.Before
class A(val b:B)
class B(val c:Int)
class First(){
def getSomething(a:A) = a.b.c
}
class Second_A extends Second_B
class Second_B{
def getSomething(a:A) = a.b.c
}
class Third_A extends Third_B
trait Third_B{
// Will get a NullPointerException here
// since a.b will be null
def getSomething(a:A) = a.b.c
}
class Mocking extends JUnitSuite with MockitoSugar{
var mockA:A = _
@Before def setup { mockA = mock[A] }
@Test def first_PASSES {
val mockFirst = mock[First]
when(mockFirst.getSomething(mockA)).thenReturn(3)
assert(3 === mockFirst.getSomething(mockA))
}
@Test def second_PASSES {
val mockSecond = mock[Second_A]
when(mockSecond.getSomething(mockA)).thenReturn(3)
assert(3 === mockSecond.getSomething(mockA))
}
@Test def third_FAILS {
val mockThird = mock[Third_A]
//NullPointerException inside here (see above in Third_B)
when(mockThird.getSomething(mockA)).thenReturn(3)
assert(3 === mockThird.getSomething(mockA))
}
}
Run Code Online (Sandbox Code Playgroud)
看来Mockito在了解类与特质之间的关系时会遇到某种问题。猜猜这并不奇怪,因为特征不是Java固有的。如果您直接嘲笑特征本身,它会起作用,但这也许不是您想要的?具有几种不同的特征,每个特征都需要一个模拟:
@Test def third_PASSES {
val mockThird = mock[Third_B]
when(mockThird.getSomething(mockA)).thenReturn(3)
assert(3 === mockThird.getSomething(mockA))
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10348 次 |
| 最近记录: |