Get startedGet started for free

Unit test: Database with a list

Consider the ErrorStore and InfoStore from the lesson, but now our process() method is accepting a list of messages. Given the input list provided, verify each database was called the correct number of times.

This exercise is part of the course

Introduction to Testing in Java

View Course

Exercise instructions

  • Create a mock for the InfoStore.
  • Create a mock for the ErrorStore.
  • Verify how many times the InfoStore mock will be called with the current arguments.
  • Verify how many times the ErrorStore mock will be called with the current arguments.

Hands-on interactive exercise

Have a go at this exercise by completing this sample code.

import org.junit.jupiter.api.Test;
import java.util.*;
import static com.datacamp.util.testing.CustomJUnitTestLauncher.launchMockitoTestsAndPrint;
import static org.mockito.Mockito.*;

public class Main {
    public static void main(String[] args) {
		launchMockitoTestsAndPrint(MessageProcessorTest.class);
    }
}

class MessageProcessorTest {
    @Test
    void process_savesToCorrectDatabase_whenValidInputList() {
        List sampleMessages = new ArrayList<>();
        sampleMessages.add("[INFO] An info message.");
        sampleMessages.add("[INFO] An info message.");
        sampleMessages.add("[ERROR] An error message.");
        sampleMessages.add("[INFO] An info message.");
        
    	// Create a mock for the InfoStore
        ____;
        // Create a mock for the ErrorStore
        ____;
        MessageProcessor processor = new MessageProcessor(infoStore, errorStore);
        processor.process(sampleMessages);

		// Verify how many times the infoStore has to store the message
        ____.save("[INFO] An info message.");
        // Verify how many times the errorStore has to store the message
        ____.save("[ERROR] An error message."); 
    }
}

public class MessageProcessor {
    private InfoStore infoStore; private ErrorStore errorStore;
    public MessageProcessor(InfoStore infoStore, ErrorStore errorStore) {
        this.infoStore = infoStore; this.errorStore = errorStore;
    }
    public void process(List messages) {
        for (String message : messages) {
            System.out.println("Processing message: " + message);
            if (message.startsWith("[INFO]")) infoStore.save(message);
            if (message.startsWith("[ERROR]")) errorStore.save(message);
        }
    }
}

interface InfoStore { void save(String message); }
interface ErrorStore { void save(String message); }
Edit and Run Code