Я пытаюсь протестировать простое приложение в Scala и протестировать его с помощью PowerMock.PowerMock не в состоянии разрешить неоднозначную ссылку
Ниже мой код
Service.scala
trait Service {
def getName(): String
def start(): Int
}
ServiceListener.scala
trait ServiceListener {
def onSuccess(service: Service): Unit
def onFailure(service: Service): Unit
}
SomeSystem.scala
import java.util
import java.util.List
import SomeSystem._
import scala.collection.JavaConversions._
object SomeSystem {
def notifyServiceListener(serviceListener: ServiceListener, service: Service, success: Boolean) {
if (serviceListener != null) {
if (success) {
serviceListener.onSuccess(service)
} else {
serviceListener.onFailure(service)
}
}
}
def startServiceStaticWay(service: Service): Int = {
val returnCode = service.start()
returnCode
}
}
class SomeSystem {
private val services: List[Service] = new util.ArrayList[Service]()
private var serviceListener: ServiceListener = _
private val events: List[String] = new util.ArrayList[String]()
def start() {
for (service <- services) {
val something = startServiceStaticWay(service)
val success = something > 0
notifyServiceListener(serviceListener, service, success)
addEvent(service, success)
}
}
private def addEvent(service: Service, success: Boolean) {
events.add(getEvent(service.getName, success))
}
private def getEvent(serviceName: String, success: Boolean): String = {
serviceName + (if (success) "started" else "failed")
}
def add(someService: Service) {
services.add(someService)
}
def setServiceListener(serviceListener: ServiceListener) {
this.serviceListener = serviceListener
}
}
Я пытаюсь модульного тестирования SomeSystem. s Кала ниже
import {ServiceListener, SomeSystem, Service}
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito
import org.powermock.api.mockito.PowerMockito
import org.powermock.modules.junit4.PowerMockRunner
//remove if not needed
import scala.collection.JavaConversions._
@RunWith(classOf[PowerMockRunner])
class PowerMockitoIntegrationTest {
private var service: Service = _
private var system: SomeSystem = _
private var serviceListener: ServiceListener = _
@Before
def setupMock() {
service = Mockito.mock(classOf[Service])
serviceListener = Mockito.mock(classOf[ServiceListener])
system = Mockito.spy(new SomeSystem())
system.add(service)
system.setServiceListener(serviceListener)
}
@Test
def startSystem() {
p("Stub using PowerMockito. service.start() should return 1 as we want start of the service to be successful")
PowerMockito.when(service.start()).thenReturn(1)
p("Start the system, should start the services in turn")
system.start()
p("Verify using Mockito that service started successfuly")
Mockito.verify(serviceListener).onSuccess(service)
p("Verifed. Service started successfully")
}
private def p(s: String) {
println(s)
}
}
К сожалению, я получаю ошибку ниже компиляции, я запутался, почему он появляется и любой способ, которым мы могли бы сделать от нее избавиться.
[ERROR] C:\IntellJWorkspace\PowerMockProblem\src\test\scala\PowerMockitoIntegrationTest.scala:29: error: ambiguous reference to overloaded definition,
[ERROR] both method when in object PowerMockito of type [T](x$1: T)org.mockito.stubbing.OngoingStubbing[T]
[ERROR] and method when in object PowerMockito of type [T](x$1: Any, x$2: Object*)org.mockito.stubbing.OngoingStubbing[T]
[ERROR] match argument types (Int)
[ERROR] PowerMockito.when(service.start()).thenReturn(1)
Привет. Не могли бы вы привести пример вместе с вашим кодом? Я хотел бы понять, что такое «SomeClass.staticmethod (someObject, someObject)» – nicola