[JAVA] Verwendung der Wrapper-Klasse

Überblick

Verwendung der Wrapper-Klasse.

Wenn Sie die letzte Klasse verspotten wollen

Ich habe Testcode geschrieben und wollte die letzte Klasse verspotten, also habe ich sie zu einer Wrapper-Klasse gemacht. Ursprünglich war es eine Methode, die die letzte Klasse als Argument verwendete, aber da sie damit nicht getestet werden kann, habe ich beschlossen, das Argument als Wrapper-Klasse zu verwenden. Wäre das nicht passiert, wenn wir es von Anfang an als Probefahrt entwickelt hätten? .. .. schwer.

Originalcode

python



@Override
protected String doInBackground(URL... url) {
    HttpURLConnection con = null;
    URL urls = url[0];

    try {
        con = (HttpURLConnection)urls.openConnection();
        con.setRequestMethod("GET");
        con.connect();

        int resCd = con.getResponseCode();
        if (resCd != HttpURLConnection.HTTP_OK) {
            throw new IOException("HTTP responseCode:" + resCd);
        }

        BufferedInputStream inputStream = new BufferedInputStream(con.getInputStream());
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        String line;
        while (true) {
            line = reader.readLine();
            if (line == null) {
                break;
            }
            mBuffer.append(line);
        }
        inputStream.close();
        reader.close();

    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        con.disconnect();
    }
    return mBuffer.toString();
}

Geänderter Code

python


@Override
protected String doInBackground(URLWrapper... urlWrapper) {
    HttpURLConnection con = null;
    URLWrapper urls = urlWrapper[0];

    try {
        con = (HttpURLConnection)urls.openConnection();
        con.setRequestMethod("GET");
        con.connect();

        int resCd = con.getResponseCode();
        if (resCd != HttpURLConnection.HTTP_OK) {
            throw new IOException("HTTP responseCode:" + resCd);
        }

        BufferedInputStream inputStream = new BufferedInputStream(con.getInputStream());
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        String line;
        while (true) {
            line = reader.readLine();
            if (line == null) {
                break;
            }
            mBuffer.append(line);
        }
        inputStream.close();
        reader.close();

    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        con.disconnect();
    }
    return mBuffer.toString();
}

doInBackground ist eine Methode von AsyncTask. Es ist eine subtile Änderung, aber zuerst habe ich java.net.URL als Argument genommen, aber ich habe festgestellt, dass die URL eine endgültige Klasse ist und nicht verspottet werden kann, also habe ich sie in eine Wrapper-Klasse geändert. Ich habe auch versucht, PowerMockito zu verwenden, aber es hat nicht funktioniert, daher verwende ich dies vorerst. Jetzt können Sie den folgenden Testcode anwenden.

python


@Test
public void test_doInBackground(){

    HttpURLConnection httpURLConnection = null;

    try{

        String rtnXml = "aaaaaaaaaaaa";
        //HttpURLConnection verspotten
        httpURLConnection = mock(HttpURLConnection.class);
        when(httpURLConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_OK);
        when(httpURLConnection.getInputStream()).thenReturn(new ByteArrayInputStream(rtnXml.getBytes("utf-8")));

        //URLWrapper-Mock
        URLWrapper urlWrapper = mock(URLWrapper.class);
        when(urlWrapper.openConnection()).thenReturn(httpURLConnection);

        //ConfirmAsyncListenerImpl mock
        ConfirmAsyncListenerImpl confirmAsyncListener = mock(ConfirmAsyncListenerImpl.class);

        // RestaurantAsync.doInBackground()Test von
        RestaurantAsync restaurantAsync = new RestaurantAsync(confirmAsyncListener);
        assertThat(restaurantAsync.doInBackground(urlWrapper), is("aaaaaaaaaaaa"));


    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        httpURLConnection.disconnect();
    }

}

Wenn ich versuche, java.net.URL zu verspotten, wird ein Kompilierungsfehler angezeigt, sodass ich feststellen kann, dass ich mit einer Wrapper-Klasse damit umgehen kann.

Die Wrapper-Klasse lautet übrigens wie folgt

URLWrapper.java



public class URLWrapper {

    private final URL url;

    public URLWrapper(URL url){
        this.url = url;
    }

    public URLConnection openConnection(){
        URLConnection urlConnection = null;
        try {
            urlConnection =  this.url.openConnection();
        }catch(IOException e){
            e.printStackTrace();
        }
        return urlConnection;
    }
}

Ich frage mich, ob es Unterschiede oder Nachteile gibt, wenn man das Argument in der letzten Klasse und in der Wrapper-Klasse nimmt. Ich werde es hinzufügen, wenn ich es wieder verstehe.

Zusammenfassung

Ich werde es hinzufügen, wenn ich es wieder bemerke.

Recommended Posts

Verwendung der Wrapper-Klasse
[Java] Verwendung der File-Klasse
[Verarbeitung × Java] Verwendung der Klasse
[Java] Verwendung der Calendar-Klasse
Verwendung der Java-Klasse
Verwendung der link_to-Methode
Verwendung der include? -Methode
Verwendung der Methode form_with
Verwendung von Klassenmethoden [Java]
[Java] Verwendung der Math-Klasse
[Schienen] Verwendung der Kartenmethode
[Java] Verwendung der toString () -Methode
Studieren der Verwendung des Konstruktors (Java)
[Verarbeitung × Java] Verwendung der Schleife
Verwendung der Java Scanner-Klasse (Hinweis)
[Verarbeitung × Java] Verwendung der Funktion
Verwendung von Map
Verwendung mit_option
Verwendung von fields_for
Verwendung von java.util.logging
Verwendung der Karte
Verwendung von collection_select
Wie benutzt man Twitter4J
Wie benutzt man active_hash! !!
Verwendung von MapStruct
Verwendung von TreeSet
[Verwendung des Etiketts]
Wie man Identität benutzt
Wie man Hash benutzt
Verwendung von Dozer.mapper
Wie benutzt man Gradle?
Verwendung von org.immutables
Verwendung von java.util.stream.Collector
Verwendung von VisualVM
Verwendung von Map
Verwendung des Kameramoduls OV7725 (ESP32-WROVER-B)
[Java] Verwendung der FileReader-Klasse und der BufferedReader-Klasse
Ausgabe der Verwendung der Slice-Methode
Verwendung der replace () -Methode (Java Silver)
[Ruby-Grundlagen] Verwendung der Slice-Methode
[Java] Verwendung der Kalenderklasse und der Datumsklasse
Verwendung der Ketten-API
[Java] Verwendung von Map
Verwendung der Warteschlange mit Priorität
[Rails] Verwendung von Enum
Verwendung von Java Optional
Verwendung von JUnit (Anfänger)
Verwendung von Ruby return
[Rails] Verwendung von Enum
Verwendung von @Builder (Lombok)
Wie man Big Decimal benutzt
[Java] Verwendung von removeAll ()