tuve una clase simple que naturalmente dividido en dos partes, por lo que refactorizado comoScala y Mockito con rasgos
class Refactored extends PartOne with PartTwo
Entonces comenzaron las pruebas de unidad que falla.
A continuación se muestra un intento para volver a crear el problema. La funcionalidad de los tres ejemplos es la misma, pero la tercera prueba falla con una NullPointerException como se indica. ¿De qué se trata el uso de los rasgos que está causando el problema con mockito?
Edit: ¿Es Mockito la mejor opción para Scala? ¿Estoy usando las herramientas incorrectas?
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))
}
}
Consideré burlarlo directamente, pero parecía menos limpio que probar la clase general. Bueno, es un trabajo bastante bueno por ahora. – Pengin