I am currently writing many JUnit tests for an outdated system.
Often I turn to the question: What is the best way to approve complex objects?
Here is my current code
public class SomeParserTest { @Test public void testParse() throws Exception { final SomeParser someParser = new SomeParser(); someParser.parse("string from some file"); final List<Result> listOfResults = someParser.getResults(); assertThat(listOfResults, hasSize(5)); assertResult(listOfResults.get(0), "20151223", 2411189L, isEmptyOrNullString(), "2.71", "16.99"); assertResult(listOfResults.get(1), "20151229", 2411190L, isEmptyOrNullString(), "2.86", "17.9"); assertResult(listOfResults.get(2), "20151229", 2411191L, is("1.26"), ".75", "23.95"); assertResult(listOfResults.get(3), "20151229", 2411192L, is("2.52"), "1.5", "47.9"); assertResult(listOfResults.get(4), "20151229", 2411193L, isEmptyOrNullString(), "2.71", "16.99"); final List<SubResult> listofSubResuls = someParser.getSubResultOf(listOfResults.get(0)); assertThat(listofSubResuls, hasSize(1)); assertSubResult(listofSubResuls.get(0), 12.5D, "20151223", 1L, 14.87D, 16.99D, 0L, null, 67152L, "20151223", "2", 0L, "02411189", 56744349L); final List<SubResult> listofSubResuls1 = someParser.getListofBBBS(listOfResults.get(1)); assertThat(listofSubResuls1, hasSize(2)); assertSubResult(listofSubResuls1.get(0), 30.0D, "20151228", 1L, 12.53D, 17.9D, 0L, null, 67156L, "20151229", "2", 0L, "02411190", 56777888L); assertSubResult(listofSubResuls1.get(1), 33.3D, "20151228", 1L, 4.66D, 6.99D, 1L, "J", 67156L, "20151229", "2", 21L, "02411190", 56777889L);
There is no easy way to test every step of such a parser, and I cannot archive it so much, as this is legacy code ...
Thank you for your help!