Как проверить функцию контроллера с формой аргумента? - PullRequest
0 голосов
/ 27 декабря 2018

Heads Up: Это мой первый пост здесь, пожалуйста, извините за недостающую информацию или действительно начинающие вопросы.

Так что я сейчас пытаюсь написать тесты jUnit для уже готового веб-приложения, использующего Spring (всеработает, я просто должен получить полное покрытие с тестами).У меня есть классы: «Сотрудник», «СотрудникКонтроллер» и «СотрудникМенеджмент».Я хочу протестировать функцию «registerNew», которая создает нового сотрудника с заполненной формой «EmployeeRegistrationForm», если в нем нет ошибок («Результат ошибок»).

Теперь я хочу написать тест для этого, чтобы сделатьубедитесь, что функция действительно создает новый объект «Сотрудник», который должен быть сохранен в «EmployeeRepository» с указанной формой.

Однако я не могу создать заполненную «EmployeeForm», поскольку онаабстрактный и не может быть создан.Поэтому я изо всех сил пытаюсь дать какой-либо аргумент этой функции и не знаю, как передать информацию, необходимую для теста, в тестируемую функцию.

@Service

@Transactional

public class EmployeeManagement {

    private final EmployeeRepository employees;
    private final UserAccountManager userAccounts;


    EmployeeManagement(EmployeeRepository employees, UserAccountManager userAccounts) {

        Assert.notNull(employees, "employeeRepository must not be null!");
        Assert.notNull(userAccounts, "UserAccountManager must not be null!");

        this.employees=employees;
        this.userAccounts = userAccounts;
    }

    //the function that creates the employee
    public Employee createEmployee(EmployeeRegistrationForm form) {

        Assert.notNull(form, "Registration form must not be null!");

        String type = form.getType();
        Role role = this.setRole(type);
        UserAccount useraccount = userAccounts.create(form.getUsername(), form.getPassword(), role);

        useraccount.setFirstname(form.getFirstname());
        useraccount.setLastname(form.getLastname());


        return employees.save(new Employee(form.getNumber(), form.getAddress(), useraccount));
    }

@Controller

public class EmployeeController {

    private final EmployeeManagement employeeManagement;

    EmployeeController(EmployeeManagement employeeManagement) {

        Assert.notNull(employeeManagement, "userManagement must not be null!");

        this.employeeManagement = employeeManagement;
    }

    @PostMapping("/registerEmployee")
    @PreAuthorize("hasRole('ROLE_ADMIN')")
    String registerNew(@Valid EmployeeRegistrationForm form, Errors result) {

        if (result.hasErrors()) {
            return "registerEmployee";
        }

        employeeManagement.createEmployee(form);

        return "redirect:/";
    }
public interface EmployeeRegistrationForm {

    @NotEmpty(message = "{RegistrationForm.firstname.NotEmpty}")
    String getFirstname();

    @NotEmpty(message = "{RegistrationForm.lastname.NotEmpty}")
    String getLastname();


    @NotEmpty(message = "{RegistrationForm.password.NotEmpty}")
    String getPassword();

    @NotEmpty(message = "{RegistrationForm.address.NotEmpty}")
    String getAddress();

    @NotEmpty(message = "{RegistrationForm.number.NotEmpty}")
    String getNumber();

    @NotEmpty(message = "{RegistrationForm.type.NotEmpty}")
    String getType();

    @NotEmpty(message = "{RegistrationForm.username.NotEmpty}")
    String getUsername();
}

1 Ответ

0 голосов
/ 30 декабря 2018

Однако я не могу создать заполненную "EmployeeForm" , поскольку она абстрактна и не может быть создана .

Использовать Mockito для создания ваших абстрактных классов.Вы можете использовать его так:

EmployeeForm form = mock(EmployeeForm.class);

Теперь у вас есть экземпляр EmployeeForm, который вы можете передать своим методам.Если вам нужно вызвать некоторые методы из вашего макета, вы можете сделать что-то вроде этого:

given(form.getFirstname()).willReturn("John");

Таким образом, форма будет вести себя так, как вы хотите.

Примечание: mock() исходит отorg.mockito.Mockito и given происходит от org.mockito.BDDMockito.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...