Meine Frage bezieht sich auf das Testen einer Klasse, die viele Schnittstellen implementiert. Zum Beispiel habe ich diese Klasse:Wie können wir testen, dass eine Klasse viele Schnittstellen implementiert?
public class ServiceControllerImpl extends ServiceController implements IDataChanged, IEventChanged {
}
Jetzt gibt es zwei Möglichkeiten zum Testen. Die erste testet direkt auf der konkreten Klasse. Das bedeutet, der Objekttyp ist die konkrete Klasse und nicht die Schnittstelle.
public class ServiceControllerImplTest {
ServiceControllerImpl instance;
@Before
public void setUp() {
instance = new ServiceControllerImpl();
// you can bring this instance anywhere
}
}
Die zweite Möglichkeit besteht darin, nur die Schnittstelle zu testen. Wir müssen dieses Objekt auf alle Schnittstellen schreiben, die es implementiert.
public class ServiceControllerImplTest {
ServiceController instance; // use interface here
IDataChanged dataChangeListener;
@Before
public void setUp() {
instance = new ServiceControllerImpl();
dataChangeListener = (IDataChanged) instance;
// instance and dataChangeListener "look like" two different object.
}
}
Ich ziehe die zweite Lösung, weil vielleicht in Zukunft werden wir die Schnittstelle an andere Objekte implementiert ändern können, so die konkrete Klasse unter Verwendung könnte in Zukunft vorgeschriebenen Prüfungen nicht führen. Ich kenne die Best Practice für dieses Problem nicht.
Thanks :)
Yeah zum Testen einer Schnittstelle, die Sie auf dem Schnittstellentyp testen. Also ist Ihre zweite Lösung im Grunde genommen der Weg zu gehen. – JayC667
Ich bin sicher, der obige Kommentar gibt die Antwort, aber Ihre Frage braucht ein wenig Klärung. Wenn Sie 'dataChangeListener = (IDataChanged) dataChangeListener;' geschrieben haben, meinten Sie 'dataChangeListener = (IDataChanged) instance;', oder? –
@DaveSchweisguth ja. Ich habe bearbeitet. vielen Dank. – hqt