Hier ist ein komplizierter Ansatz:
Eine Idee wäre, das Muster Observer
zu implementieren, eine Listener-Schnittstelle zu definieren, die Ereignisse von Ihrer getesteten Klasse abonnieren kann. das Ereignis würde in diesem Fall nach dem if-Block gesendet werden:
public interface EventListener{
// EventDetails would be an object that encapsulates
// event type and extra data
void process(EventDetails type);
}
private void dispatchEvent(EventType type){
for(EventListener listener : this.listeners){
listener.process(new EventDetails(type
/* you'll want to add more data than that here */));
}
}
@Override
public void update() {
if (isStopped() || isPaused()) {
return;
}
dispatchEvent(EventType.UPDATE);
// ...
}
Und in der Testklasse:
yourClass.addEventListener(new EventListener(){
public void process(EventDetails details){
if(EventType.UPDATE.equals(details.getEventType())){
fail("Received update event");
}
}
});
// set to stopped or paused
yourClass.update();
// if we got here, test has succeeded
Natürlich ist dieser Ansatz einen großen Eingriff in die Art und Weise, die Dinge jetzt arbeiten, und es macht nur Sinn, wenn Ihre Anwendung tatsächlich ein Ereignisbenachrichtigungssystem verwenden könnte (die Testfunktion des Geräts ist nur ein netter Nebeneffekt).
Oder etwas ganz anderes:
im Gerät zu testen, verwenden Sie eine Unterklasse, die überschreibt welche Methode nach dem if-Block aufgerufen wird.
Also lassen Sie uns sagen, dass die Original-Code ist dies:
@Override
public void update() {
if (isStopped() || isPaused()) {
return;
}
doUpdate();
}
dann die Unterklasse würde überschreiben die doUpdate()
Methode:
protected void doUpdate(){
fail("I shouldn't be here");
}
Wir brauchen mehr Code zu sehen, wie diese Methode keinen sichtbaren Zustand ändert - so Welche Instanzvariablen gibt es und was tun isStopped und isPaused? – Mark
Bestätigen Sie, dass was auch immer '// ...' tut, ist nicht passiert? –
Die Testabdeckung der gesamten Einheit ist schwer zu erreichen und wahrscheinlich nicht die Mühe wert. Es sei denn, es gibt einige funky Interaktionen, das sieht aus wie ein Fall, den Sie in den "zu harten" Korb setzen könnten. –