【发布时间】:2020-07-31 08:40:29
【问题描述】:
您好,我是 Junit 新手,我目前正在使用 Junit 5 为此类编写单元测试:
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
Optional<User> user = userRepository.findByEmail(email);
user.orElseThrow(() -> new UsernameNotFoundException("Not found: " + email));
return user.map(UserDetailsImpl::new).get();
}
}
下面是一个测试类:
class UserDetailsServiceImplTest {
private static UserDetailsServiceImpl userDetailsServiceImpl;
String email;
/*User mockedUser;
UserRepository userRepository;
UserDetails userDetails;*/
@BeforeAll
static void setup() {
userDetailsServiceImpl = new UserDetailsServiceImpl();
}
@Test
void testLoadUserByUsername() {
/*userRepository = mock(UserRepository.class);
mockedUser = mock(User.class);
Optional<User> user = Optional.of(mockedUser);
when(userRepository.findByEmail(email)).thenReturn(user);
assertEquals(userRepository.findByEmail(email), user);*/
UserDetails userDetails = userDetailsServiceImpl.loadUserByUsername(email);
assertTrue(userDetails instanceof UserDetails);
}
}
我明白了:
[错误] 测试运行:1,失败:0,错误:1,跳过:0,经过时间:5.108 秒
[INFO] Running com.example.kanban.WebSecurityConfigTest
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 s - in com.example.kanban.WebSecurityConfigTest
2020-04-18 13:36:56.910 INFO 9180 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
2020-04-18 13:36:56.910 INFO 9180 --- [extShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2020-04-18 13:36:56.918 INFO 9180 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2020-04-18 13:36:56.934 INFO 9180 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
[INFO]
[INFO] Results:
[INFO]
[ERROR] Errors:
[ERROR] UserDetailsServiceImplTest.testLoadUserByUsername:55 » NullPointer
[INFO]
[ERROR] Tests run: 4, Failures: 0, Errors: 1, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.708 s
[INFO] Finished at: 2020-04-18T13:36:57+02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (default-test) on project kanban: There are test failures.
我试图让userRepository.findByEmail(email) 方法返回Optional<User> user 以使错误消失(我的尝试已被注释掉),但我无法处理这个问题。
【问题讨论】:
-
我看不出你到底在哪里出错,但你可能无法很好地自动装配 userRepository。你能查一下stackoverflow.com/questions/45470877/…
-
您确定
userRepository正在自动连线吗?您能否提供更多的堆栈跟踪信息? -
你至少需要
@RunWith(SpringRunner.class) @SpringBootTest(classes = {....})你在你的测试类中使用了这些注解吗? -
@Shoshi 我已经添加了这些注释,但我仍然得到同样的错误
-
@Ascalonian 当我运行应用程序时它工作正常,所以我确定 userRepository 正在自动装配
标签: java spring spring-boot junit