Packages, classes, and methods

By default, dcover create automatically runs across the entire project. If required, you can specify what modules, packages, classes, or methods you want to restrict these operations to.

Module examples

For modules this can be done in two different ways. Diffblue Cover can be run on a single module by invoking dcover in the appropriate module directory. If dcover is run across an entire multi-module project, you can also fine tune the selection of modules using the --exclude-modules=<module>,[<module>,...] option;

Example: dcover create --exclude-modules=scripts

or alternatively, you can directly specify the modules you want Diffblue Cover to run on by using the --include-modules=<module>,[<module>,...] option.

Example: dcover create --include-modules=api

Packages, classes, and methods

If required, you can specify what packages, classes, or methods you want to restrict these operations to, by specifying one or more entry points on the command line using [<entryPoint>...] .

Example: dcover create io.corebanking.Account

Also you can use similar specifications for excluding particular packages, classes, and methods from test-writing.

Example: dcover create --exclude=io.corebanking.Account


Package example

Specify a package entry point on the command line using the standard Java naming convention, plus an optional trailing dot and/or wildcards.

Syntax: dcover create <package>[.][*]


Trailing dot: dcover create <package>.

For example: dcover create com.a.

Description: Write tests for all accessible methods within package <package> (in our example, com.a) and any sub-packages. For example, tests could be written for sub-packages com.a.B and com.a.b.C . Trailing dot prefix doesn't support wildcard *.


No trailing dot: dcover create <package>

For example: dcover create com.a

Description: Write tests for all accessible methods within any package that begins with <package> (in our example, com.a) and any sub-packages. For example, tests could be written for com.apple, com.apricot, com.apricot.pip, etc.


Wildcard: dcover create '<package>*'

For example: dcover create '*.controller.*'

Description: Write tests for all accessible methods within any package that contains <package> (in our example, .controller.) and any sub-packages plus wildcard matches. For example, tests could be written for com.controller.apple, org.controller, etc. Note that when using the * wildcard character, the entry point must be enclosed in single quotes, as shown.


Class example

Specify a class entry point on the command line using the standard Java naming convention, plus an optional trailing dot and/or wildcards.

Syntax: dcover create <package>[.][*].<className>[.][*][extends][implements[|]]


Trailing dot: dcover create <package>.<className>.

For example: dcover create io.diffblue.corebanking.account.Account.

Description: Write tests for all accessible methods within class <package>.<className>. only - in our example, io.diffblue.corebanking.account.Account. Trailing dot prefix doesn't support wildcard *.


No trailing dot: dcover create <pacakge>.<className>

For example: dcover create io.diffblue.corebanking.account.Account

Description: Write tests for all accessible methods within any class that begins with <package>.<className> - in our example, this could include ...Account and ...AccountException.


Wildcard: dcover create '<package>*.<className>*'

For example: dcover create 'io.diffblue.corebanking.account.*Exception'

Description: Write tests for all accessible methods within any class that begins with <package> and contains <className> plus any wildcard matches. In our example, this could include ...UserException and ...AccountException. You can also combine this with * in the package name. Note that when using the * wildcard character, the entry point must be enclosed in single quotes, as shown.

For example: dcover create '*.User*' could match io.diffblue.account.User, io.diffblue.account.UserController, io.diffblue.order.UserController and io.diffblue.order.UserRepository.


extends: dcover create '<package>.<className> extends <package>.<parentClassName>'

For example: dcover create 'io.diffblue.account.Foo extends io.diffblue.Bar'

Description: Similar to regular Java syntax, the extends keyword instructs Cover to write tests for all accessible methods within any class where the name contains <package>.<className> and extends/is a direct child to a class where the name contains <package>.<parentClassName>. Note that when using the extends keyword, the entry point must be enclosed in single quotes, as shown.

For example: dcover create '* extends io.diffblue.Bar' could match any class in any package that extends io.diffblue.Bar.


implements: dcover create '<package>.<className> implements <package>.<interfaceName>'

For example: dcover create 'io.diffblue.account.Foo implements io.diffblue.Bar'

Description: Similar to regular Java syntax, the implements keyword instructs Cover to write tests for all accessible methods within any class where the name contains <package>.<className> and implements an interface where the name contains <package>.<interfaceName>. You can specify a list of interfaces using the | delimiter - here, a target class has to match at least one of the interfaces. Note that when using the implements keyword, the entry point must be enclosed in single quotes, as shown.

For example: dcover create '* implements *.Callable | *.Runnable' will match all classes that implement either Callable, Runnable, or both.


Method example

There are two ways of specifying particular methods to be selected for operation - Prefix and Extended.


Prefix

Specify a method entry point on the command line using the standard Java naming convention, plus an optional method descriptor. Wildcards, extends, and implements are not supported for prefixes.

Syntax: dcover create <package>.<className>.<methodName>:[<methodDescriptor>]

Example: dcover create io.diffblue.corebanking.account.Account.addToBalance:

Description: Write tests for the specified method. If the optional method descriptor is omitted, all parameter and return types will be included.

A method descriptor is a list of type descriptors that describe the parameter types and the return type of a method, in a single string. For more information on method descriptors, see section 2.1.4 of the ASM 4.0 A Java bytecode engineering library.

Example: Complete prefix of addToBalance(double[] sum, String account) tiwith ASM 4.0 signature will look like this 'io.diffblue.corebanking.account.Account.addToBalance:([DLjava/lang/String;)'.


Extended

The Extended syntax supports wildcards, extends, and implements, utilizing "Java-like" syntax.

Syntax: dcover create '<package>[.][*].<className>[.][*][extends][implements[|]] {<methodName>[*][([<parameterType>,...])];}'

  • dcover create 'com.example.Foo { bar(int[], double);}' will match bar method in Foo class with exactly two parameters in order int[], double.

  • dcover create 'com.example.Foo { bar();}' will match bar method in Foo class with no parameters only.

  • dcover create 'com.example.Foo { bar;}' will match bar method in Foo class with any number and types of parameters.

  • dcover create 'com.example.Foo { *bar;}' will match any method in Foo class which ends with *bar. foobar() method will match in our example. Wildcard * can match any part of a method name but can't be used in parameter type.

  • Short qualifiers can be used when parameter is a primitive byte, char, double, float, long, short, boolean or an object of type String, Object, List. For other object types full qualifier has to be specified. com.example.Foo { bar(String);} but com.example.Foo { bar(com.example.FooBar);}.

  • Constructor method has to be specified as <init>. dcover create 'com.example.Foo { <init>(int);}' will match Foo(int) constructor method of Foo class.

  • Note that when using the Extended syntax, the entry point must be enclosed in single quotes, as shown.


Multiple specification entries

In order to specify multiple Extended syntax entries the whitespace separator should be used for the create command.

Example: dcover create 'com.foo.*' 'com.bar.*'

In case --exclude option is used it has to be specified for each entry separately.

Example: dcover create --exclude='com.foo.*' --exclude='com.bar.*'

Last updated