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.
NullArgumentException if methodName is null
Class used via an implicit conversion to enable private methods to be tested.
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.
NullArgumentException if methodName is null
Contains a factory method for instantiating PrivateMethod objects.
Contains a factory method for instantiating PrivateMethod objects.
Implicit conversion from AnyRef to Invoker, used to enable
assertions testing of private methods.
Implicit conversion from AnyRef to Invoker, used to enable
assertions testing of private methods.
the target object on which to invoke a private method.
NullArgumentException if target is null.
Trait that facilitates the testing of private methods.
To test a private method, mix in trait
PrivateMethodTesterand create aPrivateMethodobject, 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.applyfactory method, in this case'decorateToStringValue, is the name of the private method to invoke. To test the private method, use theinvokePrivateoperator, like this:targetObject invokePrivate decorateToStringValue(1)Here,
targetObjectis 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 thePrivateMethodobject. The result type of aninvokePrivateoperation will be the type parameter of thePrivateMethodobject, thus you need not cast the result to use it. In other words, after creating aPrivateMethodobject, 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, theinvokePrivateoperation will compile, but throw an exception at runtime.One limitation to be aware of is that you can't use
PrivateMethodTesterto 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 usingPrivateMethodTesterthat 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
PrivateMethodTesterto invoke a parameterless private method, you'll need to use empty parens. Instead of:You'll need to write: