Я пытаюсь использовать PowerMockito
, чтобы издеваться над DBUtil.В отличие от типичного тестового примера, я не хочу полностью высмеивать вызовы БД.Всякий раз, когда вызывается Dbutil.getConnection ().Я хочу вернуть объект подключения в мою локальную базу данных.
Простой код подключения jdbc, указанный ниже, не работает, когда я вызываю метод @BeforeClass
.Но это работает, когда я звоню из класса Java.
public static Connection getConnection() throws Exception {
System.out.println("-------- Connecting to " + Constants.CONNECTION_STR + " ------");
try {
Class.forName(Constants.ORACLE_DRIVER_NAME);
}
catch (ClassNotFoundException e) {
throw new Exception("JDBC Driver not found... " + e);
}
catch (Exception e) {
// TODO: handle exception
System.out.println("getConnection :: exp :: "+ e);
}
System.out.println("Oracle JDBC Driver Registered Sucessfully!");
Connection connection = null;
try {
connection = DriverManager.getConnection(Constants.CONNECTION_STR, Constants.USERNAME, Constants.PASSWORD);
}
catch (SQLException e) {
throw new Exception("Connection Failed!",e);
}
if (connection != null) {
System.out.println("Connected to Database Sucessfully, take control your database now!");
return connection;
}
System.out.println("Failed to make connection!");
return null;
}
Мой тестовый класс
@RunWith (PowerMockRunner.class)
@PrepareForTest(DbUtil.class)
public class MyUtilTest {
@Mock
private DbUtil dbUtil;
@InjectMocks
private MyUtil myUtil;
private static Connection myDBConn;
@BeforeClass
public static void beforeClass() throws Exception {
myDBConn = OracleJDBCConnetion.getConnection(); // This always throws invalid username/password exception.
}
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
@Test
public void testIsAdminUser() throws Throwable{
PowerMockito.mockStatic(DbUtil.class);
PowerMockito.when(DbUtil.getConnection()).thenReturn(myDBConn);
String accId= "TH123" ;
boolean isAdmin = MyUtil.isAdminUser(cloudAccGuid);
System.out.println("isAdmin : " + isAdmin);
//then
PowerMockito.verifyStatic(Mockito.times(1));
DbUtil.getConnection();
assertTrue(isAdmin);
//Finally I am closing my connection.
if(myDBConn!=null && !myDBConn.isClosed())
OracleJDBCConnetion.closeConnection(myDBConn);
}
}
Метод beforeClass всегда выбрасывает значение ниже ожидаемого.
Connection Failed! java.sql.SQLException: ORA-01017: invalid username/password; logon denied
Но тот же код работает, когда я пытаюсь из обычного класса Java,
Может ли кто-нибудь помочь понять, что здесь не так?
Я использую ojdbc6.jar и powermokito-1.5.6, и моя версия базы данных Oracle - 11.2.0.4.0
Спасибо.
Редактировать: я обнаружил, что @PrepareForTestаннотация вызывает ошибку.без аннотации соединение успешно, но макет не работает.Может ли кто-нибудь помочь мне понять, что происходит?Я очень новичок в этих насмешках.