首页 > 解决方案 > 单元测试服务层上的 AssertionError(在 Java 中使用 Spring)

问题描述

尝试对我的服务层进行单元测试,这是我的测试代码:

@RunWith(MockitoJUnitRunner.class)
public class ServiceCreateUserTest {

    @Mock
    private UserRepository userRepository;

    @InjectMocks
    private UserCreateService userCreateService;

    @Test
    public void when_save_user_it_should_return_user() {
        User user = new User();
        user.setName("Test Name");

        when(userRepository.save(ArgumentMatchers.any(User.class))).thenReturn(new User());

        User created = userCreateService.create(user);

        assertThat(created.getName()).isSameAs(user.getName());
    }
}

这是我的服务代码:

@Service
public class UserCreateService {

    @Autowired
    UserRepository repository;

    public User create(User user) {
        return repository.save(user);
    }
}

运行时出现以下错误:

java.lang.AssertionError: 

期望:<"Test Name"> 和实际:

 <null>

引用同一个对象

有人可以在这里阐明一下吗?不确定我的测试代码中缺少什么。也许与我的方法导入有关?

标签: javaunit-testingmockito

解决方案


您将在 userRepository.save() 调用中返回一个 new User() 。因此,当调用 userRepository.save() 时,它会返回一个新的用户对象。相反,返回给定的用户。

when(userRepository.save(ArgumentMatchers.any(User.class))).thenReturn(user);

推荐阅读