2012-10-30 7 views

Antwort

2

Ich weiß - diese Frage ist alt. Aber vielleicht hat jemand das gleiche Problem ...

Erinnern Sie sich: Es ist Ihr Code, nicht wahr? So können Sie leicht aus

Refactoring
public boolean myMethod() { 
    String value = "NOTHING"; 
    if(this.someCondition) { 
    value = JOptionPane.showInputDialog(...); 
    } 
    return "NOTHING".equals(value); 
} 

zu

public boolean myMethod() { 
    String value = "NOTHING"; 
    if(this.someCondition) { 
    value = getValueFromDialog(); 
    } 
    return "NOTHING".equals(value); 
} 

protected getValueFromDialog() { 
    return JOptionPane.showInputDialog(...) 
} 

Nachdem dies geschehen, können Sie einen Test schreiben die tatsächliche Aufruf von JOptionPane spöttischen weg (Beispiel verwendet Mockito Syntax)

@Test 
public void test_myMethod() { 
    MyClass toTest = mock(MyClass.class); 

    //Call real method we want to test  
    when(toTest.myMethod()).doCallRealMethod(); 

    //Mock away JOptionPane 
    when(toTest.getValueFromDialog()).thenReturn("HELLO JUNIT"); 

    //Perform actual test code 
    assertFalse(toTest.myMethod()); 
} 

Alle fertig - jetzt fügen Sie Tests hinzu, die all die lustigen Dinge simulieren, die als Ergebnis von JOptionPane.showInputDialog() (das null zurückgibt und unerwartete Werte zurückgibt) durch einfaches AddIn entstehen können g Testfälle und verschiedene Werte für

when(toTest.getValueFromDialog()).thenReturn(...);