### Question:
CsvRow { @Override public String toString() { return "CsvRow" + fields.toString(); } private  CsvRow(ImmutableList<String> headers, int lineNumber, ImmutableList<String> fields);   CsvRow(
      ImmutableList<String> headers,
      ImmutableMap<String, Integer> searchHeaders,
      int lineNumber,
      ImmutableList<String> fields); ImmutableList<String> headers(); int lineNumber(); ImmutableList<String> fields(); int fieldCount(); String field(int index); String getField(String header); T getField(String header, Function<String, T> postProcessor); Optional<String> findField(String header); String getField(Pattern headerPattern); T getField(Pattern headerPattern, Function<String, T> postProcessor); Optional<String> findField(Pattern headerPattern); String getValue(String header); T getValue(String header, Function<String, T> postProcessor); Optional<String> findValue(String header); String getValue(Pattern headerPattern); T getValue(Pattern headerPattern, Function<String, T> postProcessor); Optional<String> findValue(Pattern headerPattern); CsvRow subRow(int startInclusive); CsvRow subRow(int startInclusive, int endExclusive); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString();  }### Answer:
@Test public void test_equalsHashCodeToString() { CsvRow a = new CsvRow(HEADERS, SEARCH_HEADERS, 1, FIELDS); CsvRow a2 = new CsvRow(HEADERS, SEARCH_HEADERS, 1, FIELDS); CsvRow b = new CsvRow(ImmutableList.of(), SEARCH_HEADERS, 1, FIELDS); CsvRow c = new CsvRow(HEADERS, SEARCH_HEADERS, 1, ImmutableList.of()); assertThat(a) .isEqualTo(a) .isEqualTo(a2) .isNotEqualTo(b) .isNotEqualTo(c) .isNotEqualTo("") .isNotEqualTo(null) .hasSameHashCodeAs(a2); assertThat(a.toString()).isNotBlank(); }