I am looking for a way to test the data in a class that processes the data and then uploads the data in a manner as clean and portable as possible. So I would like to not resort to making public get functions, to avoid anything being able to reach this data. To keep it portable, I would like to avoid using a test database, so that these tests can be ran in any situation.
Class Foo {     
    private int a;
    private int b;
    private int c;
    private DBSaver dbSaver;
    public Foo(DBSaver dbSaver) {       
        this.dbSaver = dbSaver;
    }
    public void processData() {           
        processData();
        saveToDB();
    }
    private void workNumbers() {     
        a = 1;
        b = 2;
        c = a + b;
    }
    private void saveToDB() {           
        List<Integer> list = new ArrayList<>();
        list.add(a); list.add(b); list.add(c);
        dbSaver.save(list);
    }
}
Test class:
class FooTest {       
    @Mock
    DBSaver dbSaver;
    @Mock
    Foo foo;
    @Test
    private void test() {when(dbSaver.save(any(ArrayList<>.class))).then(returnsFirstArg());
        foo = new Foo(dbSaver);
        Mockito.doThrow(new Exception() {
                //Now I would like to get a, b and c so I can ensure that they have the proper values.
            }
            ).when(foo).processData();
    }
}
Here is a pastebin version of the code]().
workNumbers() will be executed as normal, and since the save() function has been mocked to do nothing, that code won't do anything too serious.
I would like to ask if there is a way to now get the a, b and c values back in list form, through mocking an exception being thrown. The problem is accessing the private values in Foo through the mocked instance in FooTest.
 
    