Java:测试通过接口传递的具体类,Mockito,JUnit

Java:测试通过接口传递的具体类,Mockito,JUnit,java,unit-testing,junit,interface,mockito,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(

我有这个界面:

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);
    }
}
我怎样才能做到呢

谢谢

编辑:

类用户:

 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;
    }
}

坦率地说,这项测试没有增加多少价值

您的目标是验证repo是否包含您通过该方法传递的用户

假设您在该repo上有某种
getByUserName
方法,并且用户类正确定义了
equals
hashCode
,您可以进行如下测试:

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
放在测试方法名称中,试着通过名称来解释错误。

您的存储库行为异常。我希望它返回我传递到
save
中的东西的一些包装或代理实例。而是返回绑定到该键的上一个实例,或
null
。非常奇怪。@BoristheSpider:这是一个界面我有这个报告
java.lang.AssertionError:应该是app.model。User@41975e01实际值:null
尝试调试并查看问题所在。。这就是单元测试对DDEDUSER结果null的要求,无论如何,谢谢你,我将尝试修复它。。。知道如何组织测试很重要。也许我理解了为什么第二个变量为null,因为这是一个映射,我们不能添加两个具有相同值的键。那么,我现在要做什么?
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");
}