trait
PrivateMethodTester
extends AnyRef
Value Members
-
def
!=
(arg0: AnyRef): Boolean
-
def
!=
(arg0: Any): Boolean
-
def
##
(): Int
-
def
==
(arg0: AnyRef): Boolean
-
def
==
(arg0: Any): Boolean
-
-
implicit def
anyRefToInvoker
(target: AnyRef): Invoker
-
def
asInstanceOf
[T0]
: T0
-
def
clone
(): AnyRef
-
def
eq
(arg0: AnyRef): Boolean
-
def
equals
(arg0: Any): Boolean
-
def
finalize
(): Unit
-
def
getClass
(): java.lang.Class[_]
-
def
hashCode
(): Int
-
def
isInstanceOf
[T0]
: Boolean
-
def
ne
(arg0: AnyRef): Boolean
-
def
notify
(): Unit
-
def
notifyAll
(): Unit
-
def
synchronized
[T0]
(arg0: ⇒ T0): T0
-
def
toString
(): String
-
def
wait
(): Unit
-
def
wait
(arg0: Long, arg1: Int): Unit
-
def
wait
(arg0: Long): Unit
Inherited from AnyRef
Value Members
-
def
!=
(arg0: AnyRef): Boolean
-
def
##
(): Int
-
def
==
(arg0: AnyRef): Boolean
-
def
clone
(): AnyRef
-
def
eq
(arg0: AnyRef): Boolean
-
def
equals
(arg0: Any): Boolean
-
def
finalize
(): Unit
-
def
getClass
(): java.lang.Class[_]
-
def
hashCode
(): Int
-
def
ne
(arg0: AnyRef): Boolean
-
def
notify
(): Unit
-
def
notifyAll
(): Unit
-
def
synchronized
[T0]
(arg0: ⇒ T0): T0
-
def
toString
(): String
-
def
wait
(): Unit
-
def
wait
(arg0: Long, arg1: Int): Unit
-
def
wait
(arg0: Long): Unit
Inherited from Any
Value Members
-
def
!=
(arg0: Any): Boolean
-
def
==
(arg0: Any): Boolean
-
def
asInstanceOf
[T0]
: T0
-
def
isInstanceOf
[T0]
: Boolean
Trait that facilitates the testing of private methods.
To test a private method, mix in trait
PrivateMethodTester
and create aPrivateMethod
object, like this:The type parameter on
PrivateMethod
, in this caseString
, is the result type of the private method you wish to invoke. The symbol passed to thePrivateMethod.apply
factory method, in this case'decorateToStringValue
, is the name of the private method to invoke. To test the private method, use theinvokePrivate
operator, like this:targetObject invokePrivate decorateToStringValue(1)
Here,
targetObject
is a variable or singleton object name referring to the object whose private method you want to test. You pass the arguments to the private method in the parentheses after thePrivateMethod
object. The result type of aninvokePrivate
operation will be the type parameter of thePrivateMethod
object, thus you need not cast the result to use it. In other words, after creating aPrivateMethod
object, the syntax to invoke the private method looks like a regular method invocation, but with the dot (.
) replaced byinvokePrivate
. The private method is invoked dynamically via reflection, so if you have a typo in the method name symbol, specify the wrong result type, or pass invalid parameters, theinvokePrivate
operation will compile, but throw an exception at runtime.One limitation to be aware of is that you can't use
PrivateMethodTester
to test a private method declared in a trait, because the class the trait gets mixed into will not declare that private method. Only the class generated to hold method implementations for the trait will have that private method. If you want to test a private method declared in a trait, and that method does not use any state of that trait, you can move the private method to a companion object for the trait and test it usingPrivateMethodTester
that way. If the private trait method you want to test uses the trait's state, your best options are to test it indirectly via a non-private trait method that calls the private method, or make the private method package access and test it directly via regular static method invocations.