按照给出的示例尝试创建我自己的 junit 测试,但是事情一直被 assertTrue(rs.next());
我正在尝试测试的代码
public void insertEmployee(Employees emp) {
Connection conn = null;
PreparedStatement ps = null;
final String SQL = "INSERT INTO " + '"' + "Remburstment"+ '"' + ".employee values(?,?,?,?,?,?,?,?)";
try {
conn = ConnectionFactory.getConnection();
ps = conn.prepareStatement(SQL);
ps.setString(1, emp.getEmail());
ps.setString(2, emp.getPassword());
ps.setString(3, emp.getFirstName());
ps.setString(4, emp.getLastName());
ps.setBoolean(5, emp.getIsAManager());
ps.setString(6, emp.getMyManagerEmail());
ps.setString(7, emp.getMyManagerFirstName());
ps.setString(8, emp.getMyManagerLastName());
ps.execute();
}catch(SQLException e) {
e.printStackTrace();
}finally {
ConnectionClosers.closeConnection(conn);
ConnectionClosers.closeStatement(ps);
}
LOGGY.debug("The EmployeeRepository insertEmployee was successfully called, and it created: " + emp);
}
Junit 测试
@Test
public void TestInsertEmployee()
{
Connection conn= null;
try
{
conn = ConnectionFactory.getConnection();
try(Statement stCheck=conn.createStatement())
{
conn.setAutoCommit(false);
// Initial cleanup:
stCheck.executeUpdate("DELETE FROM " +'"' + "Remburstment"+ '"' + ".manager");
stCheck.executeUpdate("DELETE FROM " + '"' + "Remburstment"+ '"' + ".employee");
// Setting input parameters
String userName = "employee";
String Password = "password1";
String firstName = "bob";
String lastName = "Kelco";
String myManagerEmail = "manger";
String myManagerFirstName = "Robert";
String myManagerLastName= "Cox";
Boolean isAManager = false;
// Do the call:
Manager manguy = new Manager(myManagerEmail, Password, myManagerFirstName, myManagerLastName );
Employees guy = new Employees(myManagerEmail, Password, myManagerFirstName, myManagerLastName, true, myManagerEmail, myManagerFirstName, myManagerLastName);
Employees emp = new Employees(userName, Password, firstName, lastName,isAManager, myManagerEmail, myManagerFirstName, myManagerLastName );
empRepository.insertManager(guy);
empRepository.insertEmployee(guy);
empRepository.insertEmployee(emp);
// Javabean Checks: Check the javabean contains the expected values:
assertEquals(userName, emp.getEmail());
assertEquals(firstName, emp.getFirstName());
assertEquals(Password, emp.getPassword());
assertEquals(lastName, emp.getLastName());
assertEquals(isAManager, emp.getIsAManager());
assertEquals(myManagerEmail, emp.getMyManagerEmail());
assertEquals(myManagerFirstName, emp.getMyManagerFirstName());
assertEquals(myManagerLastName, emp.getMyManagerLastName());
// Database Checks:
// Check the Person table contains one row with the expected values:
try(ResultSet rs=stCheck.executeQuery("SELECT * FROM " + '"' + "Remburstment"+ '"' + ".employee "))
{
//System.out.println(rs.getString(1));
// assertTrue(rs.next());
rs.next();
System.out.println(rs);
assertEquals(userName, rs.getString(1));
assertEquals(firstName, emp.getFirstName());
assertEquals(Password, emp.getPassword());
assertEquals(lastName, emp.getLastName());
assertEquals(isAManager, emp.getIsAManager());
assertEquals(myManagerEmail, emp.getMyManagerEmail());
assertEquals(myManagerFirstName, emp.getMyManagerFirstName());
assertEquals(myManagerLastName, emp.getMyManagerLastName());
assertFalse(rs.next());
}
// Check the Contractor table contains one row with the expected values:
System.out.println(userName);
try(ResultSet rs=stCheck.executeQuery("SELECT * FROM " + '"' + "Remburstment"+ '"' + ".employee WHERE userName ="+ userName ))
{
assertTrue(rs.next());
System.out.println(rs.getString(1));
assertEquals(userName, rs.getString(1));
assertEquals(firstName, emp.getFirstName());
assertEquals(Password, emp.getPassword());
assertEquals(lastName, emp.getLastName());
assertEquals(isAManager, emp.getIsAManager());
assertEquals(myManagerEmail, emp.getMyManagerEmail());
assertEquals(myManagerFirstName, emp.getMyManagerFirstName());
assertEquals(myManagerLastName, emp.getMyManagerLastName());
assertFalse(rs.next());
}
}
finally
{
// Undo the testing operations:
conn.rollback();
}
}
catch (SQLException e)
{
fail(e.toString());
}
}
最佳答案
需要检查的事情很少
- 您是否使用 MockitoJUnitRunner 对类进行了注释?因为这会将应用程序作为真实的应用程序启动,以便可以实例化内部的对象。
- 这是 Junit 测试?我还没有看到这里发生任何 mock 。基本上你的 ResulSet 实际上应该被 Mocked。
- 我想是的,NPE 是因为您的 ConnectionFactory 给定的连接对象不包含您的数据库连接值,所以您会遇到异常。
始终尝试模拟处理业务逻辑的对象。
关于java - Junit 不会断言 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61180777/