【发布时间】:2021-07-14 15:37:28
【问题描述】:
我不知道为什么会这样,服务的 Autowired 在控制器中工作但在 Junit 测试类中不起作用
这是我的 JUnit 测试:
package com.crmbackend.user;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.jupiter.api.Test;
import com.crmbackend.entity.Role;
import com.crmbackend.entity.User;
import com.crmbackend.userService.UserService;
@DataJpaTest(showSql = true)
@AutoConfigureTestDatabase(replace = Replace.NONE)
@Rollback(false)
public class UserServiceTests {
@Autowired
private TestEntityManager entityManager;
@Autowired
private UserService service;
@Test
public void testCreateNewUserWithSingleRolePasswordEncode() {
Role roleUser = entityManager.find(Role.class, 3);
User userLucas = new User("lucas9324", "Lucas", "Tom", "qqq542417349", "Lucas9324@outlook.com", "7364832234");
userLucas.addRole(roleUser);
User savedUser = service.save(userLucas);
assertThat(savedUser.getId()).isGreaterThan(0);
}
}
这是我的服务类:
package com.crmbackend.userService;
import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import com.crmbackend.entity.User;
@Service
@Transactional
public class UserService {
@Autowired
private UserRepository userRepo;
@Autowired
private RoleRepository roleRepo;
@Autowired
private PasswordEncoder passwordEncoder;
public User getByUsername(String username) {
return userRepo.getUserByUsername(username);
}
private void encodePassword(User user) {
String encodedPassword = passwordEncoder.encode(user.getPassword());
user.setPassword(encodedPassword);
}
public User save(User user) {
boolean isUpdatingUser = (user.getId() != null);
if (isUpdatingUser) {
User existingUser = userRepo.findById(user.getId()).get();
if (user.getPassword().isEmpty()) {
user.setPassword(existingUser.getPassword());
} else {
encodePassword(user);
}
} else {
encodePassword(user);
}
return userRepo.save(user);
}
}
@Autowired 的
@Autowired
private UserService service;
在控制器中工作正常,但在 JUnit 测试中不工作...... 总是遇到不符合条件的 bean 发现问题。
有什么建议吗?
【问题讨论】: