Chapter 9. Testing
9.1 Setting the Test Class Life Cycle
Problem
You want to instantiate a JUnit 5 test only once per class instance, rather than the default once per test function.
Solution
Use the @TestInstance
annotation, or set the life cycle default property in the junit-platform.properties file.
Discussion
Note
This recipe, as with many of the recipes in this chapter, is based on a blog post and presentation entitled, âBest Practices for Unit Testing in Kotlin,â by Philipp Hauer.
JUnit 4 by default creates a new instance of the test class for each test method. This ensures that the attributes of the test class are reinitialized each time, which makes the tests themselves independent. The downside is that the initialization code is executed again and again for each test.
To avoid that in Java, any properties of the class can be marked static
, and any initialization code can be put in a static method that is annotated with @BeforeClass
, which will be executed only once.
As an example, consider the following JUnit 4 test for java.util.List
, shown in Example 9-1.
Example 9-1. JUnit 4 test for a list
public
class
JUnit4ListTests
{
private
static
List
<
String
>
strings
=
Arrays
.
asList
(
"this"
,
"is"
,
"a"
,
"list"
,
"of"
,
"strings"
)
;
private
List
<
Integer
>
modifiable
=
new
ArrayList
<
>
(
)
;
@BeforeClass
public
static
void
runBefore
(
)
{
System
.
out
.
println
(
"BeforeClass: ...
Get Kotlin Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.