Java:测试通过Interface,Mockito,JUnit传递的Concrete类

时间:2017-12-09 16:54:05

标签: java unit-testing junit interface mockito

我有这个界面:

public interface RepositoryUserDB {

    User createUser(User user);
}

并将该方法实现到以下类中:

public class MemoryUserDB implements RepositoryUserDB{

    Map<String, User> repo = new HashMap<>();

    @Override
    public User createUser(User user) {
        return repo.put(user.getUsername(), user);
    }
}

目标是测试方法。我开始写这个,但我认为这不正确:

@Test
public void testCreateUser(){
    User result = new User("luca", "antico", "23.11.2011", "112");
    Assert.assertEquals("luca", result.getUsername());
}

我怎样才能完成它?

由于

编辑:

班级用户:

 public class User {

    private String username;
    private String password;
    private String dateOfBirth;
    private String SSN;

    public User(String username, String password, String dateOfBirth, String SSN) {
        this.username = username;
        this.password = password;
        this.dateOfBirth = dateOfBirth;
        this.SSN = SSN;
    }

    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }

    public String getDateOfBirth() {
        return dateOfBirth;
    }

    public String getSSN() {
        return SSN;
    }
}

1 个答案:

答案 0 :(得分:2)

坦率地说,该测试并没有增加太多的价值。

您的目标是验证回购是否包含您通过该方法的用户。

假设您在该repo上有某种getByUserName方法,并且User类已正确定义equalshashCode,您可以进行如下测试:

private MemoryUserDB memoryUserDB;

@Test
public void shouldCreateUser(){
   // Arrange
   User user = new User("luca", "antico", "23.11.2011", "112");

   // Act
   User addedUser = memoryUserDB.createUser(user);

   // Assert
   assertEquals(user, addedUser);
   assertEquals(user, memoryUserDB.getByUsername("luca");
}

另外,尽量不要将test放在测试方法名称中,尝试通过名称解释行为。