Ich benutze CAKE 0.21.1.0.Übergabe von CakeContext an eine andere .cake-Datei
Mein build.cake
Skript lädt ein weiteres .cake
Skript: tests.cake
.
In tests.cake
habe ich eine Klasse namens TestRunner
. TestRunner
hat eine Methode namens RunUnitTests()
, die Komponententests unter Verwendung der VSTest
Methode provided by CAKE ausführt.
In build.cake
, erstelle ich mehrere Instanzen von TestRunner
. Jedes Mal, wenn ich die RunUnitTests()
Methode auf einem der Instanzen aufrufen, sehe ich die folgende Fehlermeldung:
error CS0120: An object reference is required for the non-static field, method, or property 'VSTest(IEnumerable<FilePath>, VSTestSettings)'
Ich denke, das liegt daran, dass ich VSTest
auf eine explizite Instanz von CakeContext
in tests.cake
anrufen müssen.
Meine Frage ist: Wie kann ich sicherstellen, dass mein tests.cake
Skript die gleiche CakeContext
Instanz wie mein build.cake
Skript teilt? Was muss ich tun, damit tests.cake
kompiliert wird?
EDIT:
Als Reaktion auf devlead's reply, habe ich beschlossen, mehr Informationen hinzuzufügen.
public void RunUnitTests(ICakeContext context)
In build.cake
, eine meiner Aufgaben macht folgendes::
TestRunner testRunner = TestRunnerAssemblies[testRunnerName];
testRunner.RunUnitTests(this);
wo TestRunnerAssemblies
ein Read-Only-Wörterbuch ist in
I devlead Vorschlag und änderte meine RunUnitTests()
Methodensignatur gefolgt tests.cake
und testRunnerName
ist eine zuvor definierte Variable. (In build.cake
habe ich #l "tests.cake"
eingefügt.)
Jetzt sehe ich diese Fehlermeldung:
error CS0027: Keyword 'this' is not available in the current context
Was mache ich falsch?
EDIT:
Es macht nichts, ich muss lernen, wie man mehr sorgfältig zu lesen. Anstatt this
zu übergeben, übergab ich stattdessen Context
, wie ursprünglich von Devlead vorgeschlagen. Jetzt kann die RunUnitTests
Methode ohne Problem aufgerufen werden.
Verwenden Sie keine 'this', verwenden Sie stattdessen' Context' wie hier gezeigt: https://github.com/cake -contrib/Cake.Recipe/blob/develop/setup.cake # L13 und auch, wie in @devlead Beispiel –