Avatar billede dresen Nybegynder
13. november 2007 - 14:58 Der er 7 kommentarer og
1 løsning

Redirect System.out i forbindelse med Unit test af konsol app

Hej eksperter

Jeg har brug for at kunne redirecte System.out i forbindelse med at jeg skal unit teste en applikation, hvor der outputtes til konsollen.

Jeg har fundet en række eks. der beskriver det, men omfanget af de mange klasser under IO, gør mig kongeligt forvirret.

Min tanke er som følger:

Class SUB{

public final TRUE_TEXT = "it is so true";
public final FALSE_TEXT = "false again";
public void doStuff(boolean status){

  if(status){
    System.out.println(TRUE_TEXT);
  else
    System.out.println(FALSE_TEXT);
}

}
Unit test class

SUB sub;

@Before
  public void runBeforeTest(){ 
    sub = new SUB();
  }

@Test
  public testDoStuff(){
   
    // redirect System.out så jeg kan tilgå indholdet
    // naivt antager jeg at eks. et array kan bruges
   
    System.setOut () // hjælp mig her
 
    String [] redirected = sub.doStuff(true) // n
    assertEquals(redirected[0] , sub.TRUE_STRING)     
  }

Håber mit spørgsmål giver mening og at I kan hjælpe mig videre

på forhånd tak

/Andreas
Avatar billede arne_v Ekspert
13. november 2007 - 15:27 #1
Et gammelt eksempel:

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;

public class CaptureOutput {
    public static void main(String[] args) {
        try {
            PrintStream save = System.out;
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            PrintStream pw = new PrintStream(baos);
            System.setOut(pw);
            T t = new T();
            t.start();
            t.join();
            System.setOut(save);
            pw.flush();
            System.out.println("from thread: " + baos.toString());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

class T extends Thread {
    public void run() {
        System.out.println("Hello world");
    }
}
Avatar billede arne_v Ekspert
13. november 2007 - 15:28 #2
Det goer ingen forskel at du ikke skal bruge en thread.
Avatar billede arne_v Ekspert
13. november 2007 - 15:28 #3
T t = new T();
            t.start();
            t.join();

vil bare vaere:

            T t = new T();
            T.something();
Avatar billede dresen Nybegynder
13. november 2007 - 17:03 #4
Hej arne

Tak for dit hurtige svar.

Jeg havde set dit eks., men havde vist få set let for hurtigt på det.

Tror det giver mening for mig nu.

Smid et svar, så du kan få point.

Om muligt kan det godt være, at der følger nogle supplerende spørgsmål fra min side :)

tak/ dresen
Avatar billede arne_v Ekspert
13. november 2007 - 17:24 #5
ok
Avatar billede dresen Nybegynder
28. november 2007 - 16:51 #6
Hej arne_v

Jeg arbejder på en skoleopgave der omhandler impl. af et ruteplalægningssystem. Et tungtvejende delmål er, at der skal gøres overvejelser omkring test, hvorefter disse tests skal implementeres.

Den test-metode vi opfordres til at gøre brug af, tager udgangspunkt i at design by contract inddrages i design-overvejelserne for systemet, og at kontrakterne indgår i specifikationen for de enkelte klasser.

Inddragelsen af kontrakter rejser en række spørgsmål, som jeg har problemer med at besvare på egen hånd. Jeg har forsøgt at læse en hel del om emnet, men min begrænsede erfaring / begrænsede abstraktionsniveau tillader ikke at jeg for en clear cut forståelse af området.

Det er derfor mit håb, at kunne indgå i en dialog med dig, og gerne andre, for at få en bedre forståelse for området. Vil du have mod på at starte en sådan dialog?

Jeg påtænker at oprette en tråd under emnet programmering, hvor dialogen kan foregå.

vh/ dresen
Avatar billede arne_v Ekspert
28. november 2007 - 17:16 #7
Jo da.

Under hensyntagen til at tid er en begraenset ressource og jeg ikke er saa staerk udi teorien.
Avatar billede dresen Nybegynder
28. november 2007 - 17:49 #8
Perfekt. Ja, det er jeg selvfølgelig helt med på.

Jeg forbereder et ordentligt oplæg, og opretter en tråd under programmering. Skriver linket i denne tråd når det er gjort.

Får det nok først færdigt en gang i morgen.

Ha en god aften.

/dresen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester