stałem dołączone do wzbogacenia typu, na przykładScala typu badania z wzbogacaniem
object MyImplicits{
implicit class RichInt(i: Int){
def complexCalculation: Int = i * 200
}
}
którego używam w kodzie jak tego
object Algorithm{
def apply(rand: Random) = {
import MyImplicits._
rand.nextInt.complexCalculation + 1
}
}
Ale w jaki sposób można wyizolować i testów jednostkowych Algorytm teraz ? W szczególności chciałbym mock przeróbka complexCalculation
, coś takiego:
class MyAlgorithmTest extends FreeSpec with MockitoSugar{
import org.mockito.Mockito.when
"MyApgorithm" {
"Delegates complex calculation" in {
val mockRandom = mock[Random]
when(mockRandom.nextInt()).thenReturn(1)
// This wouldn't work, but is the kind of thing I'm looking for
//when(1.complexCalculation).thenReturn(2)
val expected = 1 * 2 + 1
val result = MyAlgorithm(mockRandom)
assert(result === expected)
}
}
}
Jaki jest dokładnie Twój problem? Czy chcesz, aby Twój losowy obiekt int został przekonwertowany na obiekt RichInt podczas testowania? A może nie wiesz, jak użyć asercji dla losowej wartości, której nie znasz? – Samar
Wierzę, że @Pengin chce kpić z metody 'complexCalculation' - ale ponieważ tworzenie obiektu' RichInt' jest niejawne, nie ma możliwości określenia klauzuli 'when' dla tego obiektu' RichInt'. – virsox