sakshi gupta
sakshi gupta

Reputation: 53

How to write test case for NoHostAvailableException in lagom with Scala?

I have a partial function as exceptionHandler which matches the corresponding exception and throws accordingly. I am supposed to write a test case for NoHostAvailableException, but I am unable to throw the exception using mocking.

I have made already a mock server which makes embedded Cassandra down in Lagom.

This is the partial function.

private val handleException: PartialFunction[Throwable, Future[List[MonitoringData]]] = {
    case noHostAvailableException: NoHostAvailableException => throw new CassandraNotAvailableException(TransportErrorCode
        .fromHttp(Error.CassandraNotAvailableErrorCode), Error.ErrorMessageForCassandraNotAvailable)

    case _ => throw new TransportException(TransportErrorCode.InternalServerError, Error.ErrorMessageForInternalServerError)
}

This is the test case.

"not be able to interact with the database in" {
    when(mockReadDAO.getData)
        .thenThrow(NoHostAvailableException)
    assert(thrown.isInstanceOf[NoHostAvailableException])
}

The compiler doesn't take NoHostAvailableException as value.

Upvotes: 3

Views: 164

Answers (1)

Mario Galic
Mario Galic

Reputation: 48430

Note the difference between a type

NoHostAvailableException

and a value

new NoHostAvailableException(...)

in

val e: NoHostAvailableException = new NoHostAvailableException(...)

Conceptually, this is similar to the difference between type Int and value 42 in

val i: Int = 42

The meaning of the error

class com.datastax.driver.core.exceptions.NoHostAvailableException is not a value

is telling us we are using a type in a position where value is expected. Hence try

when(mockReadDAO.getData).thenThrow(new NoHostAvailableException(...))

instead of

when(mockReadDAO.getData).thenThrow(NoHostAvailableException)

Because NoHostAvailableException constructor takes java.util.Map as argument, try providing empty java.util.HashMap like so

val emptyHashMap = new java.util.HashMap[InetSocketAddress, Throwable]() 
when(mockReadDAO.getData).thenThrow(new NoHostAvailableException(emptyHashMap))

Upvotes: 1

Related Questions