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 matchbar
method inFoo
class with exactly two parameters in orderint[], double
.dcover create 'com.example.Foo { bar();}'
will matchbar
method inFoo
class with no parameters only.dcover create 'com.example.Foo { bar;}'
will matchbar
method inFoo
class with any number and types of parameters.dcover create 'com.example.Foo { *bar;}'
will match any method inFoo
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 typeString, Object, List
. For other object types full qualifier has to be specified.com.example.Foo { bar(String);}
butcom.example.Foo { bar(com.example.FooBar);}
.Constructor method has to be specified as
<init>
.dcover create 'com.example.Foo { <init>(int);}'
will matchFoo(int)
constructor method ofFoo
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