Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 映射器转换方法单元测试的正确方法_Java_Unit Testing_Mockito_Mapper - Fatal编程技术网

Java 映射器转换方法单元测试的正确方法

Java 映射器转换方法单元测试的正确方法,java,unit-testing,mockito,mapper,Java,Unit Testing,Mockito,Mapper,我有一个Mapper类,其中有一个方法可以将一种类型的用户转换为另一种类型的用户: /** * Transform new {@link User} to legacy {@link com.xxx.xxx.bo.bean.User}. * @param user User to transform. * @return Transformed user. * @throws MappingException If an error occurred when transforming.

我有一个Mapper类,其中有一个方法可以将一种类型的用户转换为另一种类型的用户:

/**
 * Transform new {@link User} to legacy {@link com.xxx.xxx.bo.bean.User}.
 * @param user User to transform.
 * @return Transformed user.
 * @throws MappingException If an error occurred when transforming.
 */
public com.xxx.xxx.bo.bean.User transform(User user)
        throws MappingException {

    try {

        com.xxx.xxx.bo.bean.User legacyUser =
                new com.xxx.xxx.bo.bean.User();
        legacyUser.setIdUser(user.getIdUser());
        legacyUser.setIdUserType(user.getIdUserType());
        legacyUser.setName(user.getName());
        legacyUser.setSurname(user.getSurname());
        legacyUser.setEmail(user.getEmail());
        legacyUser.setUserAccount(user.getUserAccount());
        legacyUser.setPassword(user.getPassword());
        legacyUser.setUserType(user.getUserType());
        legacyUser.setIsOnlyAgent(user.isIsOnlyAgent());
        legacyUser.setAgentId(user.getAgentId());
        legacyUser.setIdVaAgent(user.getIdVaAgent());
        legacyUser.setDesktopUrl(user.getDesktopUrl());

        return legacyUser;

    } catch (Exception e){
        throw new MappingException("Error when mapping User to legacy User: "
                + e.getMessage());
    }
}
我编写了一个测试,以确保映射成功:

@Test
public void GivenUser_WhenTransformToLegacyUser_LegacyUserIsReturned()
        throws Exception {

    final UUID userId = UUID.randomUUID();
    final UUID userTypeId = UUID.randomUUID();
    final String name = "name";
    final String surname = "surname";
    final String email = "email";
    final String userAccount = "user_account";
    final String password = "password";
    final String userType = "user_type";
    final boolean isOnlyAgent = getRandomBoolean();
    final UUID agentId = UUID.randomUUID();
    final UUID vaAgentId = UUID.randomUUID();
    final String desktopUrl = "desktop_url";

    final User user = mock(User.class);
    when(user.getIdUser()).thenReturn(userId);
    when(user.getIdUserType()).thenReturn(userTypeId);
    when(user.getName()).thenReturn(name);
    when(user.getSurname()).thenReturn(surname);
    when(user.getEmail()).thenReturn(email);
    when(user.getUserAccount()).thenReturn(userAccount);
    when(user.getPassword()).thenReturn(password);
    when(user.getUserType()).thenReturn(userType);
    when(user.isIsOnlyAgent()).thenReturn(isOnlyAgent);
    when(user.getAgentId()).thenReturn(agentId);
    when(user.getIdVaAgent()).thenReturn(vaAgentId);
    when(user.getDesktopUrl()).thenReturn(desktopUrl);

    com.xxx.xxx.bo.bean.User legacyUser =
            mMapper.transform(user);

    assertEquals(legacyUser.getIdUser(), userId);
    assertEquals(legacyUser.getIdUserType(), userTypeId);
    assertEquals(legacyUser.getName(), name);
    assertEquals(legacyUser.getSurname(), surname);
    assertEquals(legacyUser.getEmail(), email);
    assertEquals(legacyUser.getUserAccount(), userAccount);
    assertEquals(legacyUser.getPassword(), password);
    assertEquals(legacyUser.getUserType(), userType);
    assertEquals(legacyUser.isIsOnlyAgent(), isOnlyAgent);
    assertEquals(legacyUser.getAgentId(), agentId);
    assertEquals(legacyUser.getIdVaAgent(), vaAgentId);
    assertEquals(legacyUser.getDesktopUrl(), desktopUrl);
}
问题是这个方法太冗长了,我的问题是:

  • 这是在Mapper类中对转换方法进行单元测试的正确方法吗?有没有其他更优雅的方法来实现这一点
  • 我有一位同事说,由于这两个模型是POJO,只包含set()和get(),因此没有必要验证每个成员,相反,她只会测试最终转换的用户是否不为null
  • 谢谢。

    1)如果您试图对应用程序中的每个dto映射器进行单元测试,那就太过分了。根据我的经验,只有最关键的DTO映射器是通过这种方式进行单元测试的(而
    User
    通常是关键的映射器之一)


    2)我不会对输入用户使用模拟。一般的规则是,如果您不需要在单元测试中模拟对象,就不需要了。这是一个POJO,没有外部依赖关系和复杂逻辑。尝试在单元测试中合并用于创建DTO的构建器模式。

    如果您的用户类是POJO,为什么要模拟它们?还有:
    抛出新的MappingException(“将用户映射到旧用户时出错:+e.getMessage())让我哭了-如果异常消息不是自解释的,您甚至不知道发生了什么…您应该将实际用户参数传递给transform方法而不是mock对象。您不应该为transform方法模拟任何对象。模拟操作用于外部服务,数据库访问vs.codereview.stackexchange.com可能更适合于关于改进工作代码的问题。但在询问之前,请阅读他们的帮助页面,以确保您的问题符合他们的规则。