Handling Exceptions: Message Processing
Just as using and handling exceptions is an integral part of writing code, testing these exceptions is vital to testing your project.
In this exercise, you will practice the syntax of JUnit's class instance assertion. You are given a method which converts a
string to uppercase, but throws a custom RuntimeException
if the string is null
. The task is to write unit tests
for it.
This exercise is part of the course
Introduction to Testing in Java
Exercise instructions
- Assert the message has been converted to uppercase in the success scenario test.
- Use the correct kind of assertion to verify the exception that is thrown is an instance of the
RuntimeException
class. - Enter the expected class of the exception.
- Use the correct assertion to verify the exception message.
Hands-on interactive exercise
Have a go at this exercise by completing this sample code.
import org.junit.jupiter.api.Test;
import static com.datacamp.util.testing.CustomJUnitTestLauncher.launchTestsAndPrint;
import static org.junit.jupiter.api.Assertions.*;
public class Main {
public static void main(String[] args) {
launchTestsAndPrint(MessageProcessorTest.class);
}
}
class MessageProcessor {
public static String processMessage(String message) {
if (message == null) {
throw new RuntimeException("Message cannot be null.");
}
return message.toUpperCase();
}
}
class MessageProcessorTest {
@Test
void processMessage_returnsUppercase() {
String message = "error!";
String expected = "ERROR!";
String actual = MessageProcessor.processMessage(message);
// Assert the message is converted to uppercase
____(expected, actual);
}
@Test
void processMessage_throwsException_whenMessageIsNull() {
String message = null;
Exception expectedException = null;
try {
MessageProcessor.processMessage(message);
} catch (Exception e) {
expectedException = e;
}
// Assert the correct type of exception
____(RuntimeException.class, expectedException);
// Assert the correct exception message
____("Message cannot be null.", expectedException.getMessage());
}
}