空指针异常在测试服务和DAO类的JUnit时发生。

huangapple go评论98阅读模式
英文:

NullPointerException when Testing Service and DAO class JUnit

问题

  1. 我正在使用JUnit测试DAO但是我得到了一个空指针异常我不确定为什么因为我已经初始化了服务类以下是测试类
  2. public class RegisterTest {
  3. private UserDaoImpl userservice = new UserDaoImpl();
  4. @Mock
  5. JdbcTemplate jdbcTemplate;
  6. User user;
  7. @Before
  8. public void setUp() {
  9. user = new User();
  10. }
  11. @Test
  12. public void testSetAddress() {
  13. user.setAddress("A");
  14. assertEquals(user.getAddress(), "A");
  15. }
  16. @Test
  17. public void testSetEmail() {
  18. user.setEmail("B");
  19. assertEquals(user.getEmail(), "B");
  20. }
  21. @Test
  22. public void testSetFirstname() {
  23. user.setFirstname("C");
  24. assertEquals(user.getFirstname(), "C");
  25. }
  26. @Test
  27. public void testSetLastname() {
  28. user.setLastname("D");
  29. assertEquals(user.getLastname(), "D");
  30. }
  31. @Test
  32. public void testSetPassword() {
  33. user.setPassword("E");
  34. assertEquals(user.getPassword(), "E");
  35. }
  36. @Test
  37. public void testSetUsername() {
  38. user.setUsername("F");
  39. assertEquals(user.getUsername(), "F");
  40. }
  41. @Test
  42. public void testRegister() {
  43. userservice.register(user);
  44. String username = user.getUsername();
  45. assertEquals(userservice.findByUsername(username).size(), 1);
  46. }
  47. }
  48. 以下是UserDaoImpl
  49. public class UserDaoImpl implements UserDao {
  50. @Autowired
  51. PasswordEncoder passwordEncoder;
  52. @Autowired
  53. DataSource datasource;
  54. @Autowired
  55. JdbcTemplate jdbcTemplate;
  56. public List<User> findByUsername(String username) {
  57. String sql = "select * from users where username='" + username + "'";
  58. List<User> users = jdbcTemplate.query(sql, new UserMapper());
  59. return users;
  60. }
  61. public int register(User user) {
  62. // If username is unique
  63. String uniqueusername = "select * from users where username='" + user.getUsername() + "'";
  64. List<User> users = jdbcTemplate.query(uniqueusername, new UserMapper());
  65. if (users.size() == 0) {
  66. // encode password
  67. String encryptedPassword = passwordEncoder.encode(user.getPassword());
  68. // Updating database with new user
  69. String sql = "insert into users values(?,?,?,?,?,?)";
  70. return jdbcTemplate.update(sql, new Object[]{
  71. user.getUsername(),
  72. encryptedPassword,
  73. user.getFirstname(),
  74. user.getLastname(),
  75. user.getEmail(),
  76. user.getAddress()});
  77. } else {
  78. return 0;
  79. }
  80. }
  81. }
  82. 如何在测试类中注入该类我猜空指针异常的原因是因为DAO类没有在测试类中被正确注入
英文:

I am testing a DAO class using JUnit and I am getting a nullpointerexception which I am not sure why as I am initiating the service class. The following is the test class:

  1. public class RegisterTest {
  2. private UserDaoImpl userservice = new UserDaoImpl();
  3. @Mock
  4. JdbcTemplate jdbcTemplate;
  5. User user;
  6. @Before
  7. public void setUp() {
  8. user = new User();
  9. }
  10. @Test
  11. public void testSetAddress() {
  12. user.setAddress(&quot;A&quot;);
  13. assertEquals(user.getAddress(), &quot;A&quot;);
  14. }
  15. @Test
  16. public void testSetEmail() {
  17. user.setEmail(&quot;B&quot;);
  18. assertEquals(user.getEmail(), &quot;B&quot;);
  19. }
  20. @Test
  21. public void testSetFirstname() {
  22. user.setFirstname(&quot;C&quot;);
  23. assertEquals(user.getFirstname(), &quot;C&quot;);
  24. }
  25. @Test
  26. public void testSetLastname() {
  27. user.setLastname(&quot;D&quot;);
  28. assertEquals(user.getLastname(), &quot;D&quot;);
  29. }
  30. @Test
  31. public void testSetPassword() {
  32. user.setPassword(&quot;E&quot;);
  33. assertEquals(user.getPassword(), &quot;E&quot;);
  34. }
  35. @Test
  36. public void testSetUsername() {
  37. user.setUsername(&quot;F&quot;);
  38. assertEquals(user.getUsername(), &quot;F&quot;);
  39. }
  40. @Test
  41. public void testRegister() {
  42. userservice.register(user);
  43. String username = user.getUsername();
  44. assertEquals(userservice.findByUsername(username), 1);
  45. }
  46. }

The following is the UserDaoImpl

  1. public class UserDaoImpl implements UserDao {
  2. @Autowired
  3. PasswordEncoder passwordEncoder;
  4. @Autowired
  5. DataSource datasource;
  6. @Autowired
  7. JdbcTemplate jdbcTemplate;
  8. public List&lt;User&gt; findByUsername(String username) {
  9. String sql = &quot;select * from users where username=&#39;&quot; + username +
  10. &quot;&#39;&quot;;
  11. List&lt;User&gt; users = jdbcTemplate.query(sql, new UserMapper());
  12. return users;
  13. }
  14. public int register(User user) {
  15. // If username is unique
  16. String uniqueusername = &quot;select * from users where username=&#39;&quot; +
  17. user.getUsername() + &quot;&#39;&quot;;
  18. List&lt;User&gt; users = jdbcTemplate.query(uniqueusername, new
  19. UserMapper());
  20. if(users.size() == 0) {
  21. // encode password
  22. String encryptedPassword =
  23. passwordEncoder.encode(user.getPassword());
  24. // Updating database with new user
  25. String sql = &quot;insert into users values(?,?,?,?,?,?)&quot;;
  26. return jdbcTemplate.update(sql, new Object[] {
  27. user.getUsername(),
  28. encryptedPassword,
  29. user.getFirstname(),
  30. user.getLastname(),
  31. user.getEmail(),
  32. user.getAddress() });
  33. }
  34. else {
  35. return 0;
  36. }
  37. }

How can I inject the class in the test class? I guess the reason why the nullpointerxeception is because the dao class is not being injected properly in the test class

答案1

得分: 1

你应该使用适当的运行器来运行你的测试。

  1. @RunWith(MockitoJunitRunner.class)
  2. public class RegisterTest {

然后你需要将你的模拟对象注入到DAO中。

  1. @InjectMocks
  2. private UserDaoImpl userservice = new UserDaoImpl();
英文:

You should run your test with adequate runner

  1. RunWith(MockitoJunitRunner.class)
  2. public class RegisterTest {

Then you need to inject your mock inside the DAO

  1. @InjectMocks
  2. private UserDaoImpl userservice = new UserDaoImpl();

huangapple
  • 本文由 发表于 2020年5月5日 19:52:32
  • 转载请务必保留本文链接:https://go.coder-hub.com/61612493.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定