trait PrivateMethodTester extends AnyRef
Trait that facilitates the testing of private methods.
To test a private method, mix in trait PrivateMethodTester
and
create a PrivateMethod
object, like this:
val decorateToStringValue = PrivateMethod[String]('decorateToStringValue)
The type parameter on PrivateMethod
, in this case String
, is the result type of the private method
you wish to invoke. The symbol passed to the PrivateMethod.apply
factory method, in this
case 'decorateToStringValue
, is the name of the private method to invoke. To test
the private method, use the invokePrivate
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
the PrivateMethod
object.
The result type of an invokePrivate
operation will be the type parameter of the PrivateMethod
object, thus you need not cast the result to use it. In other words, after creating a PrivateMethod
object, the
syntax to invoke the private method
looks like a regular method invocation, but with the dot (.
) replaced by invokePrivate
.
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, the invokePrivate
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 using PrivateMethodTester
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.
Also, if you want to use PrivateMethodTester
to invoke a parameterless private method, you'll need to use
empty parens. Instead of:
targetObject invokePrivate privateParameterlessMethod
You'll need to write:
targetObject invokePrivate privateParameterlessMethod()
- Alphabetic
- By Inheritance
- PrivateMethodTester
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Type Members
-
final
class
Invocation
[T] extends AnyRef
Class whose instances represent an invocation of a private method.
Class whose instances represent an invocation of a private method. Instances of this class contain the name of the private method (
methodName
) and the arguments to pass to it during the invocation (args
). The type parameter,T
, is the return type of the private method.- Exceptions thrown
NullArgumentException
ifmethodName
isnull
-
final
class
Invoker
extends AnyRef
Class used via an implicit conversion to enable private methods to be tested.
-
final
class
PrivateMethod
[T] extends AnyRef
Represent a private method, whose apply method returns an
Invocation
object that records the name of the private method to invoke, and any arguments to pass to it when invoked.Represent a private method, whose apply method returns an
Invocation
object that records the name of the private method to invoke, and any arguments to pass to it when invoked. The type parameter,T
, is the return type of the private method.- Exceptions thrown
NullArgumentException
ifmethodName
isnull
Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
implicit
def
anyRefToInvoker(target: AnyRef): Invoker
Implicit conversion from
AnyRef
toInvoker
, used to enable assertions testing of private methods.Implicit conversion from
AnyRef
toInvoker
, used to enable assertions testing of private methods.- target
the target object on which to invoke a private method.
- Exceptions thrown
NullArgumentException
iftarget
isnull
.
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
object
PrivateMethod
Contains a factory method for instantiating
PrivateMethod
objects.Contains a factory method for instantiating
PrivateMethod
objects.