【发布时间】:2014-11-20 15:18:42
【问题描述】:
我想从我的一些步骤定义中调用 specflow 中的一些步骤。
问题是Given("I run a useful step"); 行不起作用。我得到了错误:
An object reference is required for the non-static field, method, or property `TechTalk.SpecFlow.Steps.Given(string)`.
但我正在按照维基上所说的去做。
这是我的设置:
[Binding]
public class Utility_Subtests:Steps
{
[Given(@"I run a useful step")]
public void IRunAUsefulStep()
{
//Some useful things
}
[When(@"I want to use a useful step")]
public void IWantToUseAUsefulStep()
{
Given("I run a useful step");
}
}
我不明白为什么这不起作用,因为它与示例中显示的几乎完全相同。
更新:
我通过删除我的一种方法中的“静态”解决了这个问题。傻我。
更新 2:更多信息
所以基本上在每个功能之前我想运行将登录到我们的交易系统并删除公司的代码,然后恢复它。我已经有了执行此操作的“步骤”,所以我只想在 BeforeFeature 方法中调用这些步骤。
我可以调用这些方法...但是我不能使用:string attribute = ScenarioContext.Current.CurrentScenarioBlock.ToString();,因为它不在场景上下文中,因为它在功能之前运行它是有意义的。
这是我的典型测试步骤之一:
[When(@"I ICE to the test account: ""(.*)""")]
public static void Subtest_IICEToTestAccount(string iceAccount)
{
try
{
OpenVMSDriver.SendShellCommand("ICE SET " + iceAccount);
}
catch (Exception ex) { TestDriver.CatchNTrash(ex); }
string attribute = ScenarioContext.Current.CurrentScenarioBlock.ToString();
string attrValue = Utility.GetAttributeValue(attribute);
TestDriver.ResultsLog.LogSubTest(attribute + " " + attrValue.Replace("(.*)",iceAccount));
}
它的作用是向 VMS 发送一个命令,并给我一个发生的日志。为了获得一些不错的细节,我捕获了当前场景块,然后读取属性的值并将其写入日志。
问题是如果我像这样调用这个方法:Subtest_IICEToTestAccount("Faster");
我将无法读取它们会引发异常的当前属性。
所以我想使用When("I ICE to the test account: FASTER");,但我得到了标题中的错误。也许这不是最好的方法,我应该只编写一个方法来处理删除和恢复公司的所有步骤。
【问题讨论】:
-
减号评论有什么原因吗?
-
Given是什么?是属性还是方法? -
它是 SpecFlow 中的一种方法,但据我所知,它是一种抽象方法。我将关闭 github 上的示例:github.com/techtalk/SpecFlow/wiki/…
-
嗯。为我编译,使用最新的 SpecFlow 包。
-
哦,我不觉得很傻...我的一种方法中有“静态”...我删除了它,现在它可以编译了。