Ho un codice Scala che desidero testare unitamente con ScalaMock:
class CancellationManagerSpec extends FlatSpec with MockFactory {
"Cancelling a shipment" should "check shipment is not already shipped" in {
val manager = mock[CancellationsManager]
(manager.checkStatus _).expects(*, *).returning(true).once()
val request = CancellationRequestedEvent("shipmentNumber")
manager.processCancellation(request)
}
}
Il test ha esito negativo:
[info] - should complete a series of tasks in happy case *** FAILED ***
[info] Unexpected call: <mock-6> CancellationsManager.processCancellation(CancellationRequestedEvent(shipmentNumber))
[info]
[info] Expected:
[info] inAnyOrder {
[info] <mock-6> CancellationsManager.checkStatus(*, *) once (never called - UNSATISFIED)
[info] }
[info]
[info] Actual:
[info] <mock-6> CancellationsManager.processCancellation(CancellationRequestedEvent(shipmentNumber)) (Option.scala:121)
Voglio testare che quando elaboro un annullamento, alcune attività sono fatte. Più in generale, c'è una logica come questa che vorrei testare:
class SalesOrderShippedProcess {
def execute(salesOrder: SalesOrder): Unit = {
if (doTask1() && doTask2()) {
doTask3()
doTask4()
doTask5()
}
}
def doTask1(): Boolean = ???
def doTask2(): Boolean = ???
def doTask3(): Boolean = ???
def doTask4(): Boolean = ???
def doTask5(): Boolean = ???
}
Per quanto riguarda alcuni processi, desidero verificare che le attività 3, 4 e 5 vengano eseguite solo se l'attività 1 e 2 ha esito positivo e anche se l'attività 3 non riesce, l'attività 4 e 5 deve essere eseguita indipendentemente.
Qual è il modo migliore per testarlo? Sta fallendo perché sto chiamando direttamente un metodo dell'oggetto deriso? Devo spostare tutti i metodi dell'attività nella sua classe e poi deriderla, il che mi sembra un po 'strano solo per poter scrivere un test per questo?