NullPointerException при тестировании службы и класса DAO JUnit - PullRequest
0 голосов
/ 05 мая 2020

Я тестирую класс DAO с помощью JUnit, и я получаю исключение nullpointerexception, и я не уверен, почему, поскольку я инициирую класс обслуживания. Ниже приведен тестовый класс:

public class RegisterTest {

private UserDaoImpl userservice = new UserDaoImpl();

@Mock
JdbcTemplate jdbcTemplate;

 User user;

@Before
public void setUp() {
  user = new User();
}

@Test
public void testSetAddress() {
    user.setAddress("A");
    assertEquals(user.getAddress(), "A");
}
@Test 
public void testSetEmail() {
    user.setEmail("B");
    assertEquals(user.getEmail(), "B");
}
@Test 
public void testSetFirstname() {
    user.setFirstname("C");
    assertEquals(user.getFirstname(), "C");
}
@Test 
public void testSetLastname() {
    user.setLastname("D");
    assertEquals(user.getLastname(), "D");
}
@Test 
public void testSetPassword() {
    user.setPassword("E");
    assertEquals(user.getPassword(), "E");
}
@Test 
public void testSetUsername() {
    user.setUsername("F");
    assertEquals(user.getUsername(), "F");
}
@Test
public void testRegister() {
    userservice.register(user);
    String username = user.getUsername();
    assertEquals(userservice.findByUsername(username), 1);
}
}

Ниже приведен UserDaoImpl

public class UserDaoImpl implements UserDao {
@Autowired
PasswordEncoder passwordEncoder;
@Autowired
DataSource datasource;
@Autowired
JdbcTemplate jdbcTemplate;

 public List<User> findByUsername(String username) {

  String sql = "select * from users where username='" + username + 
"'";
  List<User> users = jdbcTemplate.query(sql, new UserMapper());
  return users;
}

public int register(User user) {
// If username is unique
String uniqueusername = "select * from users where username='" + 
user.getUsername() + "'";
List<User> users = jdbcTemplate.query(uniqueusername, new 
UserMapper());
if(users.size() == 0) {
      // encode password
      String encryptedPassword = 
passwordEncoder.encode(user.getPassword());
      // Updating database with new user
      String sql = "insert into users values(?,?,?,?,?,?)";
      return jdbcTemplate.update(sql, new Object[] { 
        user.getUsername(), 
        encryptedPassword,
        user.getFirstname(),
        user.getLastname(), 
        user.getEmail(), 
        user.getAddress() });
      }

else {
    return 0;
}
  }

Как я могу ввести класс в тестовый класс? Я предполагаю, что причина, по которой nullpointerxeception, заключается в том, что класс dao не вводится должным образом в тестовый класс

1 Ответ

1 голос
/ 05 мая 2020

Вы должны запустить свой тест с подходящим бегуном

RunWith(MockitoJunitRunner.class)
public class RegisterTest {

Затем вам нужно вставить свой макет внутрь DAO

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