我用的是CAKE 0.21.1.0。
我的build.cake
脚本加载了另一个.cake
脚本:tests.cake
。
在tests.cake
中,我有一个名为TestRunner
的类。 TestRunner
有一个称为RunUnitTests()
的方法,该方法使用VSTest
方法provided by CAKE执行单元测试。
在build.cake
中,我创建TestRunner
的多个实例。每当我在任何一个实例上调用RunUnitTests()
方法时,都会看到以下错误消息:
error CS0120: An object reference is required for the non-static field, method, or property 'VSTest(IEnumerable<FilePath>, VSTestSettings)'
我认为这是因为我需要在
VSTest
中的CakeContext
的显式实例上调用tests.cake
。我的问题是:如何确保我的
tests.cake
脚本与我的CakeContext
脚本共享相同的build.cake
实例?我应该怎么做才能编译tests.cake
?编辑:
为了响应devlead's reply,我决定添加更多信息。
我遵循devlead的建议并将
RunUnitTests()
方法签名更改为:public void RunUnitTests(ICakeContext context)
在
build.cake
中,我的任务之一是执行以下操作:TestRunner testRunner = TestRunnerAssemblies[testRunnerName];
testRunner.RunUnitTests(this);
其中,
TestRunnerAssemblies
是tests.cake
中的只读字典,而testRunnerName
是先前定义的变量。 (在build.cake
中,我插入了#l "tests.cake"
。)现在,我看到此错误消息:
error CS0027: Keyword 'this' is not available in the current context
我究竟做错了什么?
编辑:
没关系,我需要学习如何更仔细地阅读。正如devlead最初建议的那样,我没有传递
this
,而是传递了Context
。现在,可以毫无问题地调用RunUnitTests
方法。 最佳答案
如果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");
}
}
关于c# - 将CakeContext传递到另一个.cake文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46485401/