Zamiast przedrzeźniając go, można spróbować spying
go w następujący sposób:
val m = spy(io.Source)
Albo można go wyśmiewać się następująco:
val m = mock[io.Source.type]
Ale jak używasz Source
w klasie ty testujesz? Jeśli miał przykładową klasę tak:
class MyClass{
def foo = {
io.Source.doSomething //I know doSomething is not on Source, call not important
}
}
Następnie, w celu skorzystania z kpiącym/szpiegostwo, to że trzeba uporządkować swoją klasę tak:
class MyClass{
val source = io.Source
def foo = {
source.doSomething
}
}
I wówczas badanie będzie musi wyglądać mniej więcej tak:
val mockSource = mock[io.Source.type]
val toTest = new MyClass{
override val source = mockSource
}
W świecie Jawy metody statyczne są zmorą kpiny. W świecie Scala odwołania do obiektów mogą być również kłopotliwe w przypadku testów jednostkowych. Ale jeśli postępujesz zgodnie z powyższym kodem, powinieneś być w stanie właściwie wyłudzić zależność od obiektu w twojej klasie.
Świetna odpowiedź! Jestem nowy w Scali i uważam to za kłopotliwe. Jak powiedział znajomy, wygląda podobnie do wzoru Dependency Injection. –
Dlaczego kpiny z mkString z pliku o.BufferedSource nie działają? Jest to metoda instancji: https://gist.github.com/Marius-Stroe/5545901 –
Pojawia się błąd: Mockito nie może kpić/szpiegować: - końcowe klasy - anonimowe klasy - pierwotne typy –