CSV to Object converter with JavaDoc comments
Prefer interfaces to implementations


private ArrayList&lt;TestData&gt; loadTestData(String calendar) {
    ArrayList&lt;TestData&gt; testDataArray = new ArrayList&lt;&gt;();



and 


        ArrayList&lt;String&gt; fields = CSVReader.parseLine(lines[i]);



and 


        ArrayList&lt;String&gt; correctHostCodes = CSVReader.parseLine(fields.get(3));
        ArrayList&lt;String&gt; correctParticipantCodes = CSVReader.parseLine(fields.get(4));
        ArrayList&lt;String&gt; correctPhoneNumbers = CSVReader.parseLine(fields.get(5));



You would normally write these as 

private List&lt;TestData&gt; loadTestData(String calendar) {
    List&lt;TestData&gt; testDataArray = new ArrayList&lt;&gt;();


and 

        List&lt;String&gt; fields = CSVReader.parseLine(lines[i]);


and 

        List&lt;String&gt; correctHostCodes = CSVReader.parseLine(fields.get(3));
        List&lt;String&gt; correctParticipantCodes = CSVReader.parseLine(fields.get(4));
        List&lt;String&gt; correctPhoneNumbers = CSVReader.parseLine(fields.get(5));


That way, even if parseLine changes its return type, you don't have to change unless it changes to something that doesn't implement the List interface.  

Range-based for loops


    String[] lines = calendar.split("\r\n");

    // always skip lines[0] as it contains the headers
    for (int i = 1; i &lt; lines.length; ++i) {
        ArrayList&lt;String&gt; fields = CSVReader.parseLine(lines[i]);



You could rewrite this as 

    List&lt;String&gt; lines = Arrays.asList(calendar.split("\r\n"));

    // always skip lines[0] as it contains the headers
    for (String line : lines.sublist(1, lines.size())) {
        List&lt;String&gt; fields = CSVReader.parseLine(line);


Or not.  If you find the indexed form easier to follow, that works too.