在当前上下文中不存在名称'ninja'

时间:2012-09-30 05:56:08

标签: c# .net cucumber

使用以下代码,我得到以下错误: NinjaSteps.cs(16,13):错误CS0103:当前上下文中不存在名称'ninja'

我用来编译的命令行是: csc /target:library /reference:C:\Ruby193\lib\ruby\gems\1.9.1\gems\ cuke4nuke-0.4.0\dotnet\Cuke4Nuke.Framework.dll /reference:C:\Fitnesse\FitNesseRo ot\jediwhale-fitsharp-a78d820\binary\tools\nunit\framework\nunit.framework.dll / reference:C:\Users\Rahul\Documents\Visual~1\Projects\ConsoleApplication3\Console Application3\Ninja.dll NinjaSteps.cs

我尝试编译的代码来自Cucumber自动化技术教程:

NinjaSteps.cs:

http://cuke4ninja.com/sec_ninja_survival_net.html

using System;
using System.Collections.Generic;
using System.Text;
using Cuke4Nuke.Framework;
using NUnit.Framework;
using NinjaSurvivalRate;

namespace ConsoleApplication3
{
    class NinjaSteps
    {   [Given(@"^the ninja has a ([a-z]*) level black-belt$")]
        public void TheNinjaHasABlackBelt(String level)
        {   ninja = new Ninja(level);
        }

        [When(@"^attacked by [a\s]*(.*)$")]
        public void AttackedBy(String opponent)
        {
            actions = ninja.AttackedBy(opponent);
        }

        [Then("^the ninja should (.*)$")]
        public void TheNinjaShould(String action)
        {
            Assert.IsTrue(actions.Contains(action));
        }

    }
}

Ninja.cs在下面,编译为Ninja.dll:

using System;
using System.Collections.Generic;
//using System.Linq;
using System.Text;

namespace NinjaSurvivalRate
{
    public class Ninja
    {
        public Ninja(String beltLevel)
        {

        }
        public List<String> AttackedBy(String opponent)
        {
            if ("Chuck Norris" == opponent)
                return new List<string>(
                  new String[] { "run for his life" });
            else
                return new List<string>(
                  new String[] { "engage the opponent" });
        }
    }
}

答案和反馈将不胜感激。通过类似的线程,我发现解决方案取决于具体情况,并且它们没有一致的根本原因,并且我觉得我必须详细说明确切的代码细节以了解原因。您的时间和帮助将不胜感激。感谢。

2 个答案:

答案 0 :(得分:1)

您尚未定义变量ninja。你需要:

var ninja = new Ninja(level);

为行动做同样的事。

编辑:

实际上,如果我理解你的意图,两个变量都应该是类本身的字段/属性。

答案 1 :(得分:0)

本教程并未告诉您整个历史记录。如果您转到source code,您会看到实际上声明的字段ninja已在方法TheNinjaHasABlackBelt中初始化(您已经拥有)。