我讀過使用繼承是不可能的,當使用Specflow時,這在大多數情況下是有意義的。但是,我遇到了似乎需要正確使用繼承的情況。這裏是我的課:Specflow中的繼承測試步驟導致模糊步驟
基類:
public class StepBaseClass
{
protected readonly ScenarioContext scenarioContext;
public StepBaseClass(ScenarioContext scenarioContext)
{
this.scenarioContext = scenarioContext;
}
}
首先繼承的類:
[Binding]
public class StudioEnterpriseImportConnectorSteps:StepBaseClass
{
public StudioEnterpriseImportConnectorSteps(ScenarioContext scenarioContext) :base(scenarioContext)
{
}
[Given(@"I have a data record that I want to send to the import service")]
public void GivenIHaveADataRecordThatIWantToSendToTheImportService()
{
scenarioContext.Pending();
}
[When(@"I send the information to an invalid URL")]
public void WhenISendTheInformationToAnInvalidURL()
{
scenarioContext.Pending();
}
[Then(@"an error should be generated")]
public void ThenAnErrorShouldBeGenerated()
{
scenarioContext.Pending();
}
}
第二個繼承類:
[Binding]
public class SitemapSteps:StepBaseClass
{
public SitemapSteps(ScenarioContext scenarioContext):base(scenarioContext)
{
}
[When(@"I visit the URL (.*)")]
public void WhenIVisitTheSitemapURL(string URL)
{
scenarioContext.Add("result", TestUtilities.GetResponseCode(URL));
scenarioContext.Add("response", TestUtilities.GetResponseBody(URL));
}
[Then(@"the response code should be (.*)")]
public void ThenTheResponseCodeShouldBe(string responseCode)
{
HttpStatusCode result = scenarioContext.Get<HttpStatusCode>("result");
Assert.Equal(responseCode, result.ToString());
}
}
正如你所看到的,我繼承了scenarioContext
,這是我爲了編寫多線程測試而需要做的事情。因此,我不希望爲每個類重複這段代碼,而希望能夠從基類繼承。初始化該變量的適當方法是什麼,以便我可以在每個派生類中使用它?
小記一下措辭:你寫的每一個綁定類的代碼,不測試。綁定是全球性的,您不必爲每個功能/場景再次編寫它。 –
謝謝@AndreasWillich。你是對的。我已更新我的語言。 –