2017-09-29 11 views
2

私はCAKE 0.21.1.0を使用します。別の.cakeファイルにCakeContextを渡す

My build.cakeスクリプトに別の.cakeスクリプト:tests.cakeが読み込まれます。

tests.cakeには、TestRunnerというクラスがあります。 TestRunnerには、RunUnitTests()というメソッドがあり、VSTestメソッドprovided by CAKEを使用して単体テストを実行します。

build.cakeでは、私はTestRunnerのいくつかのインスタンスを作成します。

error CS0120: An object reference is required for the non-static field, method, or property 'VSTest(IEnumerable<FilePath>, VSTestSettings)' 

私はtests.cakeCakeContextの明示的なインスタンスにVSTestを呼び出す必要があるため、これがあると思う:私はインスタンスのいずれかにRunUnitTests()メソッドを呼び出すたびに、私は次のエラーメッセージが表示されます。

質問:私のtests.cakeスクリプトが同じCakeContextインスタンスを私のbuild.cakeスクリプトと共有するにはどうすればよいですか? tests.cakeをコンパイルするにはどうすればよいですか?

EDIT:

devlead's replyに応じて、私はより多くの情報を追加することにしました。

私はdevleadの提案に従い、に私のRunUnitTests()メソッドシグネチャを変更:build.cake

public void RunUnitTests(ICakeContext context) 

、私の仕事の一つは、次の処理を行います

TestRunnerAssembliesがで読み取り専用の辞書です
TestRunner testRunner = TestRunnerAssemblies[testRunnerName]; 
testRunner.RunUnitTests(this); 

tests.cake、およびtestRunnerNameは、あらかじめ定義された変数です。 (build.cakeでは、私は#l "tests.cake"が挿入されている。)

は、今私は、このエラーメッセージが表示さ:

error CS0027: Keyword 'this' is not available in the current context 

私が間違っているのは何を?

EDIT:

気にしないで、私はもっと慎重に読む方法を学ぶ必要があります。代わりにthisを渡す代わりに、私はContextに代わって、devleadがもともと提案したとおりに渡しました。今すぐRunUnitTestsメソッドは問題なしで呼び出すことができます。

+0

'this'を使用しないでください、ここに示すように代わり、' Context'を使用します。https://github.com/cake -contrib/Cake.Recipe/blob/develop/setup.cake#L13また、@devleadの例のように –

答えて

4

RunUnitTests()が静的​​メソッドまたはクラスの場合は、RunUnitTests(ICakeContext context)のようにコンテキストにパラメーターとしてコンテキストを渡す必要があります。これは、そのスコープが異なるためです。

そして、エイリアスをそのメソッドの拡張として実行できます。

例:

RunUnitTests(Context); 

public static void RunUnitTests(ICakeContext context) 
{ 
    context.VSTest(...) 
} 

クラスを持つ例:

Task("Run-Unit-Tests") 
    .Does(TestRunner.RunUnitTests); 

RunTarget("Run-Unit-Tests"); 


public static class TestRunner 
{ 
    public static void RunUnitTests(ICakeContext context) 
    { 
     context.VSTest("./Tests/*.UnitTests.dll"); 
    } 
} 
+0

あなたの助けに感謝、devlead!私はあなたの返事に応じて私の投稿にいくつかの更新を加えました。 –

+0

私の最初の例を読んでも、 'this'は' Context'を送ってはいけません。 – devlead

+1

ご返信ありがとうございます。私はもっ​​と慎重に読む方法を学ぶ必要があります:-) –

関連する問題