After you have finished this exercise, you understand how you can write assertions for an Optional
object by using Hamcrest. Let’s start by taking a look at the system under test.
The PersonRepository
interface declares one method (findById()
) which returns a Person
object that contains the information of the found person. If the requested person isn’t found from the database, this method returns null
.
The source code of the PersonRepository
interface looks as follows:
interface PersonRepository { Person findById(Long id); }
The Person
class contains the information of one person. Its source code looks as follows:
public class Person { private Long id; private String name; //Getters and setters are omitted }
The PersonFinder
class has one method called findBy()
which queries the information of the specified person from the database. This method is implemented by following these steps:
- Find the specified person from the database.
- If the specified person isn’t found from the database, return an empty
Optional
object. - If the specified person is found from the database, return an
Optional
object which contains the foundPerson
object.
The source code of the PersonFinder
class looks as follows:
public class PersonFinder { private final PersonRepository repository; public PersonFinder(PersonRepository repository) { this.repository = repository; } public Optional<Person> findById(Long id) { var person = repository.findById(id); if (person == null) { return Optional.empty(); } return Optional.of(person); } }
During this exercise you will write unit tests for the findById()
method of the PersonFinder
class. You can finish this exercise by following these steps:
1. Open the PersonFinderTest
class that’s found from the com.cleantestautomation.junit5intro.person
package.
2. Write the assertion which verifies that the system under test is working as expected when the requested person isn’t found. You can find the relevant test method from a nested test class called: WhenPersonIsNotFound
. Remember to use Hamcrest.
3. Write the assertions which ensure that the system under test is working as expected when the requested person is found. You can find the relevant test methods from a nested test class called: WhenPersonIsFound
. Remember to use Hamcrest.
4. Run the tests found from the PersonFinderTest
class and make sure that they pass.