Pełne ujawnienie: Jestem bardzo nowy w szyderczym i szyderczym środowisku. Próbuję użyć ScalaMock, ponieważ wydawało się, że jest to "domyślna" szydercza struktura do użycia z ScalaTest, ale cieszę się, że mogę użyć dowolnego innego frameworka kompatybilnego z ScalaTest.ScalaMock. Kpić z klasy, która przyjmuje argumenty:
Problem: napisałem w Scali klasę, która rozmawia z gniazdem. Klasa ma typ parametru, z jakim gniazdem ma rozmawiać, a jeden z jego argumentów jest fabryką do tworzenia gniazd tego typu. Ma podpisem:
class XScanner[T <: SocketClient](
confPath: String = "/etc/default/configPath",
socketClientFactory: String => T
) extends ScannerBase(path)
Chciałbym, aby móc pisać testy jednostkowe w tej klasie poprzez dostarczanie mock SocketClient więc mój kod testu nie trzeba podłączać do gniazda rzeczywistego, ale nie mogę pracować jak to zrobić z ScalaMock.
Mój kod testowy wygląda następująco:
val t = new XScanner[SocketClient](confPath, (s: String) => mock[SocketClient])
wyraźnie, że nie będzie skompilować ponieważ SocketClient
spodziewa ścieżkę do gniazda jako argument, ale nie mogę zadzwonić mock[SocketClient(s)]
bo to nie jest rodzaj i mogę 't wywołaj mock[SocketClient](s)
, ponieważ makieta nie przyjmuje argumentów typu przekazanego do niego jako własnych argumentów.
Jak mogę napisać próbną fabrykę SocketClient
, aby przejść do mojego skanera? Nie potrafię nawet wyobrazić sobie, jak kpić z klasy, która przyjmuje argumenty!
Jestem autorem ScalaMock. Z której wersji Scala i której wersji ScalaMock korzystasz? Odpowiedzi są różne dla ScalaMock2 versus ScalaMock3. –
Scala Mock 3 ze Scala 2.10.0 – jangoolie