Проблема как в пользовательском тесте ArrayList, так и в текущем тесте.У вас есть Arraylist, в котором хранятся ссылки, указывающие на один и тот же объект.
currentTest ---> testDTOArrayList@ioaudo
userTest ----> testDTOArrayList@ioaudo
testDTOArrayList@ioaudo --> testDTOArrayList
testDTOArrayList ---> testdto@oisudf
testdto@oisudf ---> ---------------
| amount = 05 |
---------------
Таким образом, наш компилятор запускает строку
testImpl.getUserTest().get(0).setAmount("06");
Изменение также отражается в currentTest
, поскольку оно указывает нато же самое.
Чтобы избежать этого, вам нужно иметь отдельный список массивов, чтобы изменение одного не отражалось в другом.
// This function will copy all values from one object and create a new object
// Stored copied values in it put in array list and return that arraylist
public ArrayList<TestDTO> deepCopy(TestDTO testdto) {
TestDTO testdtoCopy = new TestDTO();
testdtoCopy.setAmount(testdto.getAmount());
ArrayList<TestDTO> testDTOCopyArrayList = new ArrayList<TestDTO>();
testDTOCopyArrayList.add(testdtoCopy);
return testDTOCopy;
}
Ваш getTestDTO будет
public ArrayList<TestDTO> getTestDTO() {
ArrayList<TestDTO> testDTOArrayList = new ArrayList<TestDTO>();
TestDTO testdto = new TestDTO();
testdto.setAmount("05");
testDTOArrayList.add(testdto);
this.setUserTest(testDTOArrayList);
this.setCurrentTest(deepCopy(testdto));
return testDTOArrayList;
}
Теперь оба объекта будут разделены
userTest ---> testDTOArrayList@ioaudo
currentTest ----> testDTOCopyArray@weuirwi
testDTOArrayList@ioaudo --> testDTOArrayList
testDTOCopyArray@weuirwi ---> testDTOCopyArray
testDTOArrayList --> testdto@oisudf
testdto@oisudf ---> ---------------
| amount = 05 |
---------------
testDTOCopyArray --> testdto@5446dfg
testdto@5446dfg ---> ---------------
| amount = 05 |
---------------
Вывод:
05
05
06
05