如何为钩子使用参数化方法 - SpecFlow
How to use parameterized methods for hooks - SpecFlow
在我们的项目中,我们有多个通过 SKU id 区分的 SKU。我们正在测试将 SKU 添加到数据库的不同场景。在每个场景清理后,应该在 Db 中进行清理,以使用 AfterScenario
挂钩删除该特定场景添加的 SKU。清理方法应该接收每个场景添加的 SKU ID,以便它只会删除那些数据。如何将参数传递给标记为 AfterScenario
的清理方法(下面给出的要求示例)。
[AfterScenario]
public void Cleanup(string skuId)
{
//delete skuId from Db.
}
最好通过将每个场景创建的 SKU 放入 ScenarioContext 来跟踪它们。您可以获得对此的引用作为步骤定义的构造函数参数。然后你可以在你的钩子中访问它并删除它们:
public class SkuSteps
{
private readonly ScenarioContext scenario;
public SkuSteps(ScenarioContext scenario)
{
this.scenario = scenario;
}
[Given(@"a sku named ""(.*)"" exists")]
public void GivenASkuNamedExists(string sku)
{
// create sku
scenario.AddSku(sku);
}
}
public static class ScenarioExtensions
{
public static void AddSku(this ScenarioContext scenario, string sku)
{
var skus = scenario.GetSkus();
skus.Add(sku);
}
public static List<string> GetSkus()
{
if (!scenario.ContainsKey("skus"))
{
scenario["skus"] = new List<string>();
}
return (List<string>)scenario["skus"];
}
}
public class Hooks
{
private readonly ScenarioContext scenario;
public Hooks(ScenarioContext scenario)
{
this.scenario = scenario;
}
[AfterScenario]
public void DeleteSkus()
{
var skusToDelete = scenario.GetSkus();
// delete the skus
}
}
在我们的项目中,我们有多个通过 SKU id 区分的 SKU。我们正在测试将 SKU 添加到数据库的不同场景。在每个场景清理后,应该在 Db 中进行清理,以使用 AfterScenario
挂钩删除该特定场景添加的 SKU。清理方法应该接收每个场景添加的 SKU ID,以便它只会删除那些数据。如何将参数传递给标记为 AfterScenario
的清理方法(下面给出的要求示例)。
[AfterScenario]
public void Cleanup(string skuId)
{
//delete skuId from Db.
}
最好通过将每个场景创建的 SKU 放入 ScenarioContext 来跟踪它们。您可以获得对此的引用作为步骤定义的构造函数参数。然后你可以在你的钩子中访问它并删除它们:
public class SkuSteps
{
private readonly ScenarioContext scenario;
public SkuSteps(ScenarioContext scenario)
{
this.scenario = scenario;
}
[Given(@"a sku named ""(.*)"" exists")]
public void GivenASkuNamedExists(string sku)
{
// create sku
scenario.AddSku(sku);
}
}
public static class ScenarioExtensions
{
public static void AddSku(this ScenarioContext scenario, string sku)
{
var skus = scenario.GetSkus();
skus.Add(sku);
}
public static List<string> GetSkus()
{
if (!scenario.ContainsKey("skus"))
{
scenario["skus"] = new List<string>();
}
return (List<string>)scenario["skus"];
}
}
public class Hooks
{
private readonly ScenarioContext scenario;
public Hooks(ScenarioContext scenario)
{
this.scenario = scenario;
}
[AfterScenario]
public void DeleteSkus()
{
var skusToDelete = scenario.GetSkus();
// delete the skus
}
}