java - Junit 不会断言 true

标签 java postgresql junit

按照给出的示例尝试创建我自己的 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/

相关文章:

java - jquery.get 和 servlet

java - 使用jtds将android应用程序连接到sql server

sql - 仅返回列中的数值 - Postgresql

java - 关闭后删除由外部应用程序打开的文件

java - 将对象添加到列表时出现空指针异常

python - 为道路修建十字路口时出错

sql - 使用 CASE 和 generate_series() 查询,将结果 timestamptz 降序排列

java - 使用 Spring Security 进行 JUnit 测试

java - 如何断言集合中的所有元素都具有它们之间相等的属性?

node.js - Jasmine spyOn 函数参数对象,因为变量未定义