См. Следующий класс, который я собираюсь протестировать, логика проста, Сначала checkEmail(Entity), затем, если существует create(Entity) новый пользователь, иначе update(Entity) он. Но все эти три метода наследуются от родительского класса. Однако эти три метода могут наследовать или переопределять родительский класс родительского класса, который также имеет родительский класс ParentController. Пример: create(Entity) из родительского класса ParentController. CheckEmail Из самого ParentController.

Как я могу протестировать в этой ситуации?

public class UserController extends ParentController {
@Override
public void createUser(UserEntity userEntity) throws Exception {

 UserEntity existsUser = checkEmail(userEntity.getEmail());
     if (existsUser == null) {
        create(userEntity);
      } else {
          updateExistsUser(existsUser, userEntity);
      }
}
public class ParentController extends BaseController {
    create (Entity entity){ ...some implementation ...};
    Entity update (Entity entity){ ... some imple... return entity};
} 
0
chen 22 Дек 2016 в 07:00
Можете ли вы показать свой метод Testcase? Это поможет нам легко понять, что вы хотите здесь протестировать.
 – 
Antony Dao
22 Дек 2016 в 07:16

1 ответ

Лучший ответ

Вы можете сделать это, унаследовав от класса, который хотите протестировать, а затем предоставив собственную реализацию методам, которые вы хотите имитировать:

public class UserControllerMocked extends UserController {
    @Override
    create (Entity entity){ ... your mock code ....};
    @Override
    Entity update (Entity entity){ ... your mock code ... return entity};
}

Пример юнит-теста:

public class UserControllerTest {
    @Test
    public void test1() {
        UserEntity userEntity = new UserEntity("test@email.com");
        UserControllerMocked target = new UserControllerMocked();
        target.createUser(userEntity);

        // assertions
    }
}

Я не знаю, может ли здесь помочь насмешливый фреймворк.

0
Patrick Koorevaar 22 Дек 2016 в 12:43
Это работает, как вы сказали. полученный из класса, затем протестируйте метод.
 – 
chen
14 Июн 2017 в 09:28
Если вы обнаружите, что ответ правильный, вам следует «принять ответ», нажав серую галочку в верхнем левом углу этого ответа, спасибо.
 – 
Patrick Koorevaar
15 Июн 2017 в 09:16