Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class MyClass
- {
- public void deleteOrganization(Organization organization)
- {
- /*Delete organization*/
- /*Delete related users*/
- for (User user : organization.getUsers()) {
- deleteUser(user);
- }
- }
- public void deleteUser(User user)
- {
- /*Delete user logic*/
- }
- }
- @Test
- public void shouldDeleteOrganization()
- {
- MyClass spy = spy(new MyClass());
- // avoid invoking the method
- doNothing().when(spy).deleteUser(any(User.class));
- // invoke method under test
- spy.deleteOrganization(new Organization());
- }
- public void deleteOrganization(Organization organization)
- {
- /*Delete organization*/
- /*Delete related users*/
- for (User user : organization.getUsers()) {
- privateDeleteUser(user);
- }
- }
- private void privateDeleteUser(User user){
- //actual delete logic here, without anything delete organization doesn't need
- }
- public void deleteUser(User user)
- {
- //do validation
- privateDeleteUser(user);
- //perform any extra business locic
- }
- public void DeleteOrganizationService(){
- private MyClass myClass;
- ...
- public void delete(Organization organization)
- {
- myClass.deleteOrganization(organization);
- /*Delete related users*/
- for (User user : organization.getUsers()) {
- myClass.deleteUser(user);
- }
- }
- }
- public void deleteOrganization(Organization organization)
- {
- /*Delete organization only does not modify users*/
- }
- public void deleteUser(User user)
- {
- /*same as before*/
- }
- Self Use of only override-able method is not proper design pattern.
- Solution to above problem
- public class MyClass
- {
- public void deleteOrganization(Organization organization)
- {
- /*Delete organization*/
- /*Delete related users*/
- for (User user : organization.getUsers()) {
- deleteSingleUser(user);
- }
- }
- public void deleteUser(User user)
- {
- deleteSingleUser(user);
- }
- private void deleteSingleUser(User user){
- /*delete user*/
- }
- }
Add Comment
Please, Sign In to add comment