2016-04-12 10 views
-1

zu testen Ich versuche Socket-Kommunikation in Android Java zu testen, aber kann nicht scheinen, eine Scheinfunktion zu bekommen.Android: Versuchen, Sockets

Zunächst einmal mock(Socket.class) mit Mockito löst eine Ausnahme java.lang.VerifyError.

So codiert ich meine mock wie so:

public void testMyTest(){ 
    final ByteArrayOutputStream os = new ByteArrayOutputStream(); 
    final ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray()); 

    try{ 
     byte[] buffer = new byte[6]; 
     os.write("poulet".getBytes()); 
     is.read(buffer, 0, 6); 
     Log.w(LOG_TAG, "Read result:" + (new String(buffer, "UTF-8"))); 
    } catch(IOException e){} 
} 

Allerdings ist is nicht aus os lesen, wenn ich os.write() nennen. Das rohe Ergebnis ist [[email protected] und in Zeichenform sieht es wie ������������ aus. Ich habe versucht, os.write() zu kommentieren, aber nichts hat sich geändert.

Kann jemand einen Eingabestrom verknüpfen, um einen Ausgabestrom zu lesen?

Zu meiner Klassen teste ich gerade

genannt
final Socket mockedSocket1 = new Socket(); 
final Socket mockedSocket2 = new Socket(); 
when(mockedSocket1.getInputStream()).thenReturn(is); 
when(mockedSocket2.getOutputStream()).thenReturn(os) 

Damit meine Klassen die verknüpfte Ausgang und Eingang erhalten Ströme, die ich mit testen werde.

Vielen Dank!

Antwort

1

Der Puffer is ist immer leer.

Dies: ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray()); erstellt nur eine ByteArrayInputStream mit einem leeren Puffer, dieser Puffer wird nicht geändert, wenn Sie etwas in die ByteArrayOutputStream schreiben.

public byte [] toByteArray()

Erzeugt ein neu Byte-Array zugeordnet. Seine Größe ist die aktuelle Größe dieses Ausgabestroms und der gültige Inhalt des Puffers wurde in kopiert. ...

Was Sie tun können, ist die ByteArrayInputStream zu erstellen, nachdem Sie etwas zu dem ByteArrayOutputStream schreiben, zB:

try (ByteArrayOutputStream os = new ByteArrayOutputStream();){ 
    byte[] buffer = new byte[6]; 
    os.write("poulet".getBytes("UTF-8")); 
    try(ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());){ 
     is.read(buffer, 0, 6); 
     System.out.println("Read result:|" + (new String(buffer, "UTF-8") + "|")); 
    } 
} catch (IOException e) { 
} 
+0

Dank! Das ist großartig, aber ich habe das Problem mit einem 'PipedInputStream' und einem' PipedOutputStream' gelöst –