См. Следующий класс, который я собираюсь протестировать, логика проста, Сначала 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};
}
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
}
}
Я не знаю, может ли здесь помочь насмешливый фреймворк.
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.