Swift: überschreibt einen Initialisierer, der NSInvocation akzeptiert

9

Ich versuche, in Swift eine wiederverwendbare Testumgebung zu erstellen, mit der Idee, dass Unterklassen die Testumgebung erweitern, um die zu testende Instanz bereitzustellen, und dass sie ihre eigenen Unterklassen-spezifischen Testmethoden hinzufügen können, etwa so:

%Vor%

Wenn jedoch XCodes Tester versucht, FooPrimeTests auszuführen, ruft er nicht das Argument no-arg init() auf, ruft init(invocation: NSInvocation!) auf (und schlägt fehl, weil es keins gibt). Ich habe versucht, dies in FooTestHarness :

zu überschreiben %Vor%

und in FooPrimeTests :

%Vor%

, aber das scheitert mit der Nachricht 'NSInvocation' is unavailable .

Gibt es eine Problemumgehung?

    
David Moles 30.06.2014, 21:42
quelle

1 Antwort

1

Ich bin nicht sicher, ob ich es richtig verstanden habe, aber den Code zu überprüfen, den Sie vorgeschlagen haben, sollten Sie einen Compiler Fehler wie bekommen:

Was ich eigentlich für richtig halte, ist ganz normal, da Ihr FooPrimeTests nur XCTestCase ableitet, das verschiedene init hat wie:

%Vor%

Wahrscheinlich, wenn Sie Ihre Frage gestellt haben, dass Sie eine ältere Version von Swift verwenden (ich führe sie gerade auf Xcode Beta 6.2 aus), können Sie den Fehler nicht sehen. Aber, und ich sage wieder, wenn ich Ihren Punkt richtig verstanden habe, kann Ihre Klasse FooPrimeTests Sie benutzerdefinierte Initialisierung nicht sehen, nur weil XCTestCase, und nicht FooTestHarness Unterklasse ist. In welcher Klasse ist init(instance: Foo) definiert?

Sie möchten wahrscheinlich FooPrimeTests als Unterklasse von FooTestHarness definieren. Auf diese Weise sollten Sie Ihren Initialisierer richtig sehen können. Hoffe diese Hilfe.

    
DennyLou 19.11.2014, 06:01
quelle

Tags und Links