Не могу подключиться к тесту! Как я могу решить эту проблему? - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь представить свою компанию тестами jUnit, но когда я пытаюсь создать тест для Соединения, он терпит неудачу. Да, я смотрю на это и обнаруживаю, что каждое соединение отличается, но когда я пытаюсь запросить то же самое с помощью двух «клонированных соединений», оно все равно не может это сделать.

Функция, которую я пытаюсь проверить:

public static Connection Create_DB_connection(String jdbc_class,String jdbc_url,String db_user,String db_pswrd,
            java.util.Date wallDate,DateFormat wallDateFormat) throws Exception{
        // <-- Create DB connection (JDBC)
        System.out.println("Connecting to DB...");
        DriverManager.setLoginTimeout(10);
        Class.forName(jdbc_class); 
        Connection conn = DriverManager.getConnection(jdbc_url,db_user, db_pswrd);
        System.out.println("Connected!");
        System.out.println(wallDateFormat.format(wallDate));        
        System.out.println("");
        // -->
        return conn;
        }

Контрольный пример:

import static org.junit.Assert.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

 @Test
public void testMicroSoft() throws Exception {
    java.util.Date wallDate = new java.util.Date();
    DateFormat wallDateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
    String jdbc_url = "jdbc:jtds:sqlserver://";
    String db_user = "";
    String db_pswrd="";
    String jdbc_class="net.sourceforge.jtds.jdbc.Driver";
    String sql = "select idd_apr_workflow from d_apr_ticket where idd_apr_workflow = -1;";
    DriverManager.setLoginTimeout(10);
    Class.forName(jdbc_class); 
    Connection conn = DriverManager.getConnection(jdbc_url,db_user, db_pswrd);
    assertEquals(conn.prepareStatement(sql), Library1.Create_DB_connection(jdbc_class, jdbc_url, db_user, db_pswrd, wallDate, wallDateFormat).prepareStatement(sql));
}

@Test
public void testORA() throws Exception {
    java.util.Date wallDate = new java.util.Date();
    DateFormat wallDateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
    String jdbc_url = "jdbc:oracle:thin:";
    String db_user = "";
    String db_pswrd="";
    String jdbc_class="oracle.jdbc.OracleDriver";
    String sql = "select AMT from F_FIN_PL_A where AMT = 52907;";
    DriverManager.setLoginTimeout(10);
    Class.forName(jdbc_class); 
    Connection conn = DriverManager.getConnection(jdbc_url,db_user, db_pswrd);
    assertEquals(conn.prepareStatement(sql), Library1.Create_DB_connection(jdbc_class, jdbc_url, db_user, db_pswrd, wallDate, wallDateFormat).prepareStatement(sql));
}

@Test
public void testIQ() throws Exception {
    java.util.Date wallDate = new java.util.Date();
    DateFormat wallDateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
    String jdbc_url = "jdbc:sqlanywhere:DatabaseName=";
    String db_user = "";        
    String db_pswrd="";
    String jdbc_class="sybase.jdbc4.sqlanywhere.IDriver";
    // here sometimes should need change sql-s if existing one doesn't work anymore
    String sql = "select CHANNEL_ID from K_PDI_JOB_LOG where CHANNEL_ID = 'e60e3645-3909-4f0f-9498-66dfb83a8463';";         
    DriverManager.setLoginTimeout(10);
    Class.forName(jdbc_class); 
    Connection conn = DriverManager.getConnection(jdbc_url,db_user, db_pswrd);        
    assertEquals(conn.prepareStatement(sql), Library1.Create_DB_connection(jdbc_class, jdbc_url, db_user, db_pswrd, wallDate, wallDateFormat).prepareStatement(sql));
}

И код Test Suite, если вам нужно:

package Tests;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)
@SuiteClasses({ 
Create_DB_connetion_TEST.class })
public class TestSuite {}

И код бегуна:

package Tests;

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
public static void main(String[] args) {
    Result result = JUnitCore.runClasses(TestSuite.class);

    for(Failure failure : result.getFailures()) {
        System.out.println(failure.toString());
    }

    System.out.println("Does code is error-free? Answer: " + 
    result.wasSuccessful());
    }
    }

Этот вывод у меня сейчас:

testORA (Tests.Create_DB_connetion_TEST): ожидается: но было:

testIQ (Tests.Create_DB_connetion_TEST): ожидается: но было:

testMicroSoft (Tests.Create_DB_connetion_TEST): ожидается: net.sourceforge.jtds.jdbc.JtdsPreparedStatement, но было: net.sourceforge.jtds.jdbc.JtdsPreparedStatement

Код не содержит ошибок? Ответ: ложь

Вывод хочу: Код не содержит ошибок? Ответ: правда

1 Ответ

0 голосов
/ 28 марта 2019

Не рекомендуется использовать assertEquals() с объектами, которые используют реализацию по умолчанию equals(), унаследованную от Object.Реализация по умолчанию equals() проверяет, что ссылки указывают на один и тот же объект (в основном, на то же место в памяти).

Если вы хотите проверить тот факт, что ваш код устанавливает соединение, вы можете просто проверить, есть ли исключенияи этот тестовый запрос возвращает предопределенные данные.Например, SELECT 1 FROM dual для Oracle вернет ResultSet с одной строкой и одним столбцом.

...