Как написать тест-кейс для if-else в Mockito - PullRequest
0 голосов
/ 01 марта 2020

Я пытаюсь написать контрольный пример для следующего кода

   public boolean discharge(RegBean reg_data) {

        boolean status = false;
        try{
            con = dbConObj();

            PreparedStatement pst = con.prepareStatement("select * from patient where patientid=?");
            pst.setString(1,reg_data.getpatientID());
            ResultSet rs = (ResultSet) pst.executeQuery();

            if (rs.next()){

                String docname=rs.getString("docname").trim();
                String pstatus=rs.getString("status").trim();

                PreparedStatement ps=con.prepareStatement("update patient set ddate=?,status=? where patientID=?");
                if (pstatus.equalsIgnoreCase("Active"))
                {
                    ps.setString(1,new java.util.Date().toString());
                    ps.setString(2,"Discharged");

                    PreparedStatement pst1=con.prepareStatement("insert into history values(?,?,?,?)");

                    pst1.setString(1,docname);
                    pst1.setString(2,reg_data.getpatientID());
                    pst1.setString(3,"Discharged");
                    pst1.setString(4,new java.util.Date().toString());
                    pst1.executeUpdate();

                }
                else
                if (pstatus.equalsIgnoreCase("Discharged"))
                {
                    ps.setString(1,"");
                    ps.setString(2,"Active");

                    PreparedStatement pst1=con.prepareStatement("insert into history values(?,?,?,?)");

                    pst1.setString(1,docname);
                    pst1.setString(2,reg_data.getpatientID());
                    pst1.setString(3,"Active");
                    pst1.setString(4,new java.util.Date().toString());
                    pst1.executeUpdate();
                9
                }
                ps.setString(3,reg_data.getpatientID());
                ps.executeUpdate();

            }

            status = true;

        }
        catch(Exception e){
            e.printStackTrace();
            return status;
        }

        return status;
    }

В случае первого if(rs.next()) я высмеял rs и смог проверить его и получить покрытие. Однако в случае второго, если if (pstatus.equalsIgnoreCase("Active")) pstatus является переменной, и я не могу использовать DoReturn.when (mockedmethod). Есть ли способ проверить, чтобы я мог получить тестовое покрытие при запуске с JUnit ?

1 Ответ

1 голос
/ 01 марта 2020

Если вам уже удалось смоделировать ResultSet для rs.next (), вы также сможете выполнить:

when(rs.getString("status")).thenReturn("Active");

В дальнейшем я попытаюсь разбить метод на более мелкие методы, которые принимают высмеянный тип в качестве аргумента. Это упрощает весь тестовый сценарий, поскольку вам не нужно готовить и проверять макеты с высокой степенью вложенности. То же самое помогло бы работать с типами операторов.

Заметка: Возможно, вы захотите закрыть ResultSet и Statements перед возвратом.

...