Модульное тестирование простой службы входа в систему с использованием EasyMock

Я абсолютно новичок в модульном тестировании и прошел обучение по Mock-объекту. Я попытался протестировать простой исходный код входа в систему, но не смог создать правильный код модульного теста. Может кто-нибудь помочь, если я хочу проверить неправильное имя пользователя, правильный пароль, правильное имя пользователя и неправильный пароль:

    package com.isyn.testsetup;

    public interface ApplicationUserService {

        public ApplicationUser findByUserName(String userName);
    }

    package com.isyn.testsetup;

    public class ApplicationUser {

    private String userName;
    private String password;

    public ApplicationUser(String userName, String password) {
        this.userName = userName;
        this.password = password;

    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    }
    package com.isyn.testsetup;

    public class LoginUser {

        private ApplicationUserService applicationUserService;

    public LoginUser(ApplicationUserService applicationUserService) {

        this.applicationUserService = applicationUserService;
    }

    public boolean validateCredentials(String userName, String password) {

        boolean validationResult = false;

        try {
        ApplicationUser applicationUser = applicationUserService.findByUserName(userName);
        if (applicationUser.getPassword().equals(password)) {
            validationResult = true;
        }
        }
        catch (Exception e) {
            e.printStackTrace();
        }

        return validationResult;
    }
}

Я придумал этот тестовый пример для действительных пользователей:

package com.isyn.testsetup;

import static org.easymock.EasyMock.eq;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import junit.framework.TestCase;

import org.easymock.EasyMock;
import org.junit.Before;
import org.junit.Test;

public class TestLogIn extends TestCase{

    private ApplicationUser applicationUser;
    private ApplicationUserService mockUserServiceObj;

    @Before
    public void setup() {
        mockUserServiceObj = EasyMock.createMock(ApplicationUserService.class);
        applicationUser = new ApplicationUser("gooduser", "goodpassword");

    }

    @Test
    public void test() {
        setup();

        expect(mockUserServiceObj.findByUserName(eq("gooduser"))).andReturn(applicationUser);
        replay(mockUserServiceObj);
        LoginUser testUser = new LoginUser(mockUserServiceObj);

        boolean checkStatus = testUser.validateCredentials("gooduser", "goodpassword");
        assertTrue(checkStatus);


        }
}

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

Need Help!

person Tamaghna Guha Thakurta    schedule 30.09.2014    source источник


Ответы (1)


Я запустил ваш тестовый пример, и он работает без проблем. Какое именно сообщение об ошибке вы видите?

Несколько заметок:

  1. Ваш тестовый класс расширяет TestCase, но в JUnit 4 в этом нет необходимости. Просто добавьте аннотации к своим тестовым методам.
  2. В вашем методе test() вы вызываете setup(), но поскольку вы добавили @Before в setup(), JUnit вызывает его перед вызовом каждого метода, имеющего @Test
person Mike Woinoski    schedule 02.10.2014
comment
Спасибо, что нашли время для этого. Итак, поскольку я абсолютно новичок в фиктивном тестировании, я хотел знать, что мне делать для проверки тестовых случаев, таких как 1. неправильное имя пользователя, правильный пароль 2. правильное имя пользователя, неверный пароль 3. пустое имя пользователя, нулевой пароль Потому что, если я тестирую это против baduser и goodpassword, он показывает ошибку: java.lang.AssertionError: Неожиданный вызов метода ApplicationUserService.findByUserName(baduser): ApplicationUserService.findByUserName(gooduser): ожидаемый: 1, фактический: 0 - person Tamaghna Guha Thakurta; 02.10.2014
comment
Также о вашей второй проблеме: если я не вызываю setup(), это показывает ошибку. Вы можете попробовать и посмотреть. - person Tamaghna Guha Thakurta; 02.10.2014