У нас есть класс, целью которого является изменение значений в некоторых полях полученного объекта и сохранение значений других его полей
public void process(SomeType someObject) {
SomeType modifiedObject = modifyObject(someObject);
nextClass.process(modifiedObject);
}
private SomeType modifyObject(SomeType someObject) {
String someValueFromServiceCall = someService.getSomeValue(...);
SomeType modifiedObject = new SomeType.Builder()
.withSomeFieldValuesFromSomeObjectItself(...)
.withSomeFieldValuesFromServiceCall(someValueFromServiceCall)
.build();
return modifiedObject;
}
SomeType
- это устаревший класс, который мы можем создать, используя только его класс построителя, и у него нет методов установки. Это означает, что мы не можем изменить полученный someObject
сам, но должны построить и вернуть новый SomeType
объект из modifyObject()
, который затем метод main может передать для обработки следующему классу
Однако, похоже, это вызывает проблемы во время модульного тестирования. Похоже, мы не можем получить доступ к внутреннему modifiedObject
из класса модульного тестирования, и, как нам кажется, мы не можем ожидать или утверждать его
SomeType someObject = createSomeObjectForTest();
expect(someServiceMock.getSomeValue(...)).andReturn(SOME_VALUE);
expect(nextClassMock.process(someObject)).andReturn(...); //this is not someObject, but the new internal modifiedObject created within underTest
underTest.process(someObject);
assertEquals(someObject.getSomeField(), SOME_VALUE); //this is not someObject, but the new internal modifiedObject created within underTest