org.scalatest

PrivateMethodTester

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 PrivateMethodobject, 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.

go to: companion
known subclasses: PrivateMethodTester
    authors:
  1. Bill Venners

Inherited
  1. Hide All
  2. Show all
  1. AnyRef
  2. Any
Visibility
  1. Public
  2. All

Type Members

  1. class Invocation[T] extends AnyRef

    Class whose instances represent an invocation of a private method.

  2. class Invoker extends AnyRef

    Class used via an implicit conversion to enable private methods to be tested.

  3. 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.

Value Members

  1. def !=(arg0: AnyRef): Boolean

  2. def !=(arg0: Any): Boolean

    o != arg0 is the same as !(o == (arg0)).

  3. def ##(): Int

  4. def $asInstanceOf[T0](): T0

  5. def $isInstanceOf[T0](): Boolean

  6. def ==(arg0: AnyRef): Boolean

    o == arg0 is the same as if (o eq null) arg0 eq null else o.equals(arg0).

  7. def ==(arg0: Any): Boolean

    o == arg0 is the same as o.equals(arg0).

  8. object PrivateMethod extends AnyRef

    Contains a factory method for instantiating PrivateMethod objects.

  9. implicit def anyRefToInvoker(target: AnyRef): Invoker

    Implicit conversion from AnyRef to Invoker, used to enable assertions testing of private methods.

  10. def asInstanceOf[T0]: T0

    This method is used to cast the receiver object to be of type T0.

  11. def clone(): AnyRef

    This method creates and returns a copy of the receiver object.

  12. def eq(arg0: AnyRef): Boolean

    This method is used to test whether the argument (arg0) is a reference to the receiver object (this).

  13. def equals(arg0: Any): Boolean

    This method is used to compare the receiver object (this) with the argument object (arg0) for equivalence.

  14. def finalize(): Unit

    This method is called by the garbage collector on the receiver object when garbage collection determines that there are no more references to the object.

  15. def getClass(): java.lang.Class[_]

    Returns a representation that corresponds to the dynamic class of the receiver object.

  16. def hashCode(): Int

    Returns a hash code value for the object.

  17. def isInstanceOf[T0]: Boolean

    This method is used to test whether the dynamic type of the receiver object is T0.

  18. def ne(arg0: AnyRef): Boolean

    o.ne(arg0) is the same as !(o.eq(arg0)).

  19. def notify(): Unit

    Wakes up a single thread that is waiting on the receiver object's monitor.

  20. def notifyAll(): Unit

    Wakes up all threads that are waiting on the receiver object's monitor.

  21. def synchronized[T0](arg0: T0): T0

  22. def toString(): String

    Returns a string representation of the object.

  23. def wait(): Unit

  24. def wait(arg0: Long, arg1: Int): Unit

  25. def wait(arg0: Long): Unit