当前位置: 首页 > 知识库问答 >
问题:

测试服务和DAO类JUnit时的NullPointerException

怀洛华
2023-03-14

我正在使用JUnit测试一个DAO类,我得到了一个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个答案

倪德业
2023-03-14

您应该使用足够的运行器运行测试

RunWith(MockitoJunitRunner.class)
public class RegisterTest {

然后需要在DAO中注入mock

@InjectMocks
private UserDaoImpl userservice = new UserDaoImpl();
 类似资料:
  • DAO类的相关方面如下 我的src/test/resources/application.properties文件如下所示 在Eclipse中作为JUnit测试运行的跟踪 应用程序结构 -SRC ----application.java ----COM ----Hitstpa ----application.properties --测试 ---爪哇

  • 我有DaoImpl类: 我的测试是: 测试是成功的,但是当我运行具有覆盖率的junit测试时,它显示方法没有被覆盖,因此我的整体单元测试行覆盖率低于要求。我们能涵盖那部分吗?如果是,我们怎么做?谢了。

  • 我正在尝试从spring启动应用程序中的服务执行JUnit4测试,并且我一直使用init获取entityManagerFactory。 我还希望使用我的应用程序连接。属性文件,但它希望使用嵌入式hsqldb进行连接。 有人能给我指出正确的方向吗? 以下是相关代码: 应用特性: 主要内容: 实体: DAO/存储库: 服务: 测试: 本应包括以下内容: 堆叠:

  • customer-Mapper.xml daoimpl.java

  • 问题内容: 我正在实施基于Web服务的大学管理系统。该系统将某些课程添加到数据库。下面是我正在使用的代码。 Course.java 然后另一个文件如下 CourseDaoImpl.java 第三个是下面的Web服务文件,它与前两个交互并向数据库添加数据。 CourseService.java 查看我的代码清单,任何机构都可以建议我如何为我的add方法编写测试用例。我完全是JAVA的初学者,我从朋友

  • 如何为RestController,Service和DAO层编写JUnit测试用例? 我试过 如何验证rest控制器和其他层中的CRUD方法?