Как написать отличный тестовый сценарий для функции, которая возвращает строковое представление объекта json? - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть функция с именем userLogin(), которая принимает входные данные (имя пользователя и пароль) страницы входа в систему в качестве параметров и возвращает строковое представление объекта Json, которое содержит сведения о пользователе, который пытается войти в систему.

Моя функция:

public String userLogin(String strUser, String strPswrd) throws Exception

{

    String strResult = null;
    String strUserlevel = null;
    String strDate = null;
    String strId = null;
    int nUserID = 0;
    int nParam = 0;
    StringBuilder sbSql = null;
    JSONObject oJson = null;

    ResultSet oRs = null;
    Root oRoot = null;
    PreparedStatement oPrStmt = null;

    try{
        oRoot = Root.createDbConnection(null);
        oJson = new JSONObject();

        sbSql = new StringBuilder("SELECT * FROM members WHERE username =? AND Password = ? AND deleteflag =0 ");
        oPrStmt = oRoot.con.prepareStatement(sbSql.toString());
        nParam =0;
        oPrStmt.setString(++nParam, strUser);
        oPrStmt.setString(++nParam, strPswrd);
        oRs =oPrStmt.executeQuery();
        if(oRs.next()){
            nUserID = oRs.getInt("userlevel");

            strUserlevel = oRs.getString("users");
            strDate = oRs.getString("lastlogin");
            strId = oRs.getString("id");
            strUser = strUser.substring(0, 1).toUpperCase() + strUser.substring(1);
            oJson.put("status", "success");
            oJson.put("ID", strId);
            oJson.put("userID", nUserID);
            oJson.put("userlevel", strUserlevel);
            oJson.put("lastlogin", strDate);
            oJson.put("username", strUser);
        }
        strResult = oJson.toString();

    }
    catch(Exception ex){
        ex.printStackTrace();
    }
    return strResult;

}

В настоящее время я установил плагин groovy-eclipse из набора инструментов Groovy / Grails. Я смотрел некоторые видео на Youtube и читал некоторые учебные пособия о том, как писать тестовые примеры на Groovy, но не знаю, как реализовать его для моей функции. Может кто-нибудь помочь мне, поскольку я новичок в использовании этого инструмента.

1 Ответ

0 голосов
/ 10 сентября 2018

Возможно, вы захотите переместить соединение с БД в метод конструктора, свойства или фабрики, чтобы оно могло быть предоставлено с помощью тестов.

class YourClass {
    PreparedStatement newPreparedStatement(String sql) {
        Root.createDbConnection(null).con.prepareStatement(sql)
    }
    String userLogin(String strUser, String strPswrd) throws Exception {
        def oPrStmt = newPreparedStatement("SELECT * FROM members WHERE username =? AND Password = ? AND deleteflag =0 ")
        // all the rest of your code from "nParam = 0" on
    }
}

С этим вы можете сделать что-то вроде этого:

@Grab('org.mockito:mockito-all:1.10.19')
import static org.mockito.Matchers.*
import static org.mockito.Mockito.*

import org.junit.Rule
import org.junit.Test
import org.mockito.Mock
import org.mockito.Spy
import org.mockito.junit.MockitoJUnit
import org.mockito.junit.MockitoRule

final class UserLoginTests {
    @Rule
    public final MockitoRule mockitoRule = MockitoJUnit.rule()
    @Mock
    private PreparedStatement statement
    @Mock
    private ResultSet results

    @InjectMocks @Spy
    private YourClass yours

    @Test
    void testUserLogin() {
        when(yours.newPreparedStatement(anyString())).thenReturn(statement)
        when(statement.executeQuery()).thenReturn(results)
        when(results.next()).thenReturn(...)

        String json = yours.userLogin('user', 'pass')
        assert json == 'literal json string'
      //or
        def map = new JsonSlurper().parseText(json)
        assert map.containsKey('something')
        // etc.
      //or
        // look into org.skyscreamer.JsonAssert
    }
}
...