繁体   English   中英

存储库模拟不起作用。 返回错误的 Http 状态

[英]Repository mocking doesn`t work. Return wrong Http status

我的UsserServiceImpl.javacreateUser()方法

public ResponseEntity<UserDto> createUser(UserDto userDto) {
        User user = new User(userDto.getName(), userDto.getProducts(), getCurrentDate(), null);
        user = repository.save(user);
        return user != null ? new ResponseEntity<>(convertToDto(user), HttpStatus.OK) : new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}

我有这个方法的单元测试

@Mock
private UserRepository userRepository;

private UserService userService;

@BeforeEach
void init() {
    userService = new UserServiceImpl(userRepository);
}

@Test
void createUser() {
    Set<Product> productSet = createProducts();
    LocalDate date = getCurrentDate();
    User user = new User("Max", productSet, date, null);

    when(userRepository.save(user)).thenReturn(new User(UUID.fromString("e7485042-b46b-11e9-986a-b74e614de0b0"), "Max", productSet, date, null));

    ResponseEntity<UserDto> userDto = userService.createUser(new UserDto("Max", productSet));

    assertEquals(HttpStatus.OK, userDto.getStatusCode());
    assertEquals(userDto.getBody(), new UserDto("Max", productSet));
}

当我执行测试时,我收到一个 `\\error:

org.opentest4j.AssertionFailedError:预期:200 OK 实际:400 BAD_REQUEST

据我了解,问题在于repository.save()方法返回 null。
我完全不明白为什么这个字符串

when(userRepository.save(user))
 .thenReturn(
   new User(UUID.fromString("e7485042-b46b-11e9-986a-b74e614de0b0"), 
   "Max", 
   productSet, 
   date, 
   null)
 );

不能正常工作,任何帮助表示赞赏!

这是因为在这个场景中涉及到 2 个User对象。 在运行时在createUser()内部,将创建一个新的User对象。 User对象不等于您在编写 Mock 语句时创建的User对象。 因此,您可以在定义模拟语句时接受任意User对象。

Mockito.any(User.class)

如果您希望这两个对象相等; User类应该提供适当的equals()实现。 它似乎没有提供这样的实现。 因此,您可以尝试以下操作。

    when(userRepository.save(any(User.class)))
   .thenReturn(
      new User(UUID.fromString("e7485042-b46b-11e9-986a-b74e614de0b0"), 
              "Max", 
              productSet, 
              date, 
              null)
   );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM