2013-05-08 4 views
0

Я пишу JUnit для указанных ниже методыИсключения ArrayOutOfBound при запуске JUnit

Может кто-нибудь предложить подходящее решение этой

После запуска JUnit я получаю ниже исключения

java.lang.ArrayIndexOutOfBoundsException: -84 
    at org.apache.commons.codec.binary.Base64.isBase64(Base64.java:137) 
    at org.apache.commons.codec.binary.Base64.isArrayByteBase64(Base64.java:163) 

Моих класс испытания

public class DecodeToObjectTest extends TestCase { 


    public void testDecode() { 
     try { 
      String data="data"; 
       ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
       ObjectOutputStream oos = new ObjectOutputStream(baos); 

       oos.writeObject(data);  
      // convert String into InputStream 
      DecodeToObject.decode(new String(baos.toByteArray())); 


     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

} 

Метод, который мне нужно проверить

public static 
    Object decode(
      String input) throws IOException, 
            ClassNotFoundException 
    { 
     Log log = LogFactory.getFactory().getInstance(
         "com.avocent.cps.report.service"); 

     try 
     { 
      boolean c = Base64.isArrayByteBase64(input.getBytes()); 

      if(log.isDebugEnabled()){ 
      log.debug("DecodeToObject :Entering Helper Input: " + input);   } 

      byte[] data = Base64.decodeBase64(input.getBytes()); 

      ObjectInputStream ois = new ObjectInputStream(
             new ByteArrayInputStream(data)); 

      if(log.isDebugEnabled()){ 
      log.debug("DecodeToObject :Object Input stream ois: " + ois);   } 

      Object obj = null; 

      obj = ois.readObject(); 


      if(log.isDebugEnabled()){ 
      log.debug(
       "DecodeToObject :Convering object to String: " 
       + obj.toString()); 
      } 
      ois.close(); 

       if(log.isDebugEnabled()){ 
         log.debug(
       "DecodeToObject :Decoded byte array to object successfully "); 
       } 

      return obj; 
     } 
     catch(ClassNotFoundException cnfe) 
     { 
       if(log.isErrorEnabled()){ 

      log.error("DecodeToObject : Error :"); 

        } 

      throw cnfe; 
     } 
     catch(IOException ioe) 
     { 

      if(log.isErrorEnabled()){ 
      log.error("DecodeToObject : Error :"); 

      } 

      throw ioe; 
     } 
    } 
+0

Трассировка стека – Programmer

+0

Теперь я попытался байт [] temp = новый байт [10]; \t \t \t/* ByteArrayOutputStream baos = new ByteArrayOutputStream(); \t \t ObjectOutputStream oos = new ObjectOutputStream (baos); \t \t oos.writeObject (data1); \t \t */ \t \t \t // Преобразование строки в InputStream \t \t \t \t байт [] S = Base64.encodeBase64 (температура); \t \t \t DecodeToObject.декодировать (новые строки); – Programmer

ответ

0

Похоже, что вход не кодируется Base64. Попробуйте это:

boolean c = Base64.isArrayByteBase64(input.getBytes()); 
if(log.isDebugEnabled()){ 
    log.debug("DecodeToObject :Entering Helper Input: " + input);   } 

if(c) { 
    byte[] data = Base64.decodeBase64(input.getBytes()); 
    // your code 
} 

Но я полагаю, что isArrayByteBase64() бросает исключение. Посмотрите на source code из

private static boolean isBase64(byte octect) { 
    if (octect == PAD) { 
     return true; 
    } else if (base64Alphabet[octect] == -1) { 
     return false; 
    } else { 
     return true; 
    } 
} 

Статическая массив байтов base64Alphabet не имеет элемент с индексом «-84» и, следовательно, ArrayIndexOutOfBoundsException.

+0

Теперь я попробовал что-то вроде byte [] temp = new byte [10]; \t \t \t/* ByteArrayOutputStream baos = new ByteArrayOutputStream(); \t \t ObjectOutputStream oos = new ObjectOutputStream (baos); \t \t oos.writeObject (data1); \t \t */ \t \t \t // Преобразование строки в InputStream \t \t \t \t байт [] S = Base64.encodeBase64 (температура); \t \t \t DecodeToObject.decode (new String (s)); Теперь он дает erro как java.io.StreamCorruptedException: недопустимый заголовок потока: 00000000 \t at java.io.ObjectInputStream.readStreamHeader (Неизвестный источник) – Programmer

0

Вместо этого:

byte[] data = Base64.decodeBase64(input.getBytes()); 

Попробуйте это:

byte[] s = Base64.encodeBase64URLSafe(input.getBytes()); 
byte[] data = Base64.decodeBase64(s); 
0

Я столкнулся с той же Exception. Тесты JUnit прошли в моей среде IDE, но не удалось создать Maven.

Переключение с

@RunWith (MockitoJUnitRunner.class)

к

@RunWith (PowerMockRunner.class) @PowerMockRunnerDelegate (SpringJUnit4ClassRunner.class)

исправил проблему ,

Смежные вопросы