c# - Specflow上下文注入(inject)

标签 c# automation specflow

这是关于 specflow 中上下文注入(inject)的问题。我和我的实体一起上课:

public class OrderInfo
{
    public string Status { get; set; }
    public string OrderName { get; set; }
}

在另一个类中,我使用这个实体来创建新订单:

[Binding]
public class OrderSteps
{
    private NgWebDriver driver;
    private OrderInfo orderInfo = new OrderInfo();

    public OrderSteps(NgWebDriver driver,OrderInfo orderInfo)
    {
        this.orderInfo = orderInfo;
        this.driver = driver;
    }

    [When(@"I am creating new order")]
    public void WhenIAmCreatingNewOrder(Table table)
    {
        var orderListPage = new OrdersListPage(driver);
        orderInfo = orderListPage.CreateNewOrder(table.CreateInstance<OrderInfo>());
    }
}

在此类中,我的方法返回一些存储在“orderInfo”对象中的数据。一切都很好,直到我需要在另一个类中使用该对象的数据。我正在尝试获取我的对象数据,但里面是空的....

    [Binding]
public class BuyerPortalSteps
{
    private NgWebDriver driver;
    private OrderInfo orderInfo;

    public BuyerPortalSteps(NgWebDriver driver, OrderInfo orderInfo)
    {
        this.driver = driver;
        this.orderInfo = orderInfo;
    }
}

所以问题是:如何从已经填充了第一类数据的对象中使用第二类中的数据

最佳答案

看来我找到了解决办法。我为我的 OrderInfo 创建了一个子类:

public class OrderInfoContext
{
    public OrderInfo OrderInfo { get; set; }
}

我的绑定(bind)类有一些变化:

public class OrderSteps
{
    private NgWebDriver driver;
    private List<FilterInfo> filterData = new List<FilterInfo>();
    private OrderInfoContext orderInfoContext;
    private OrderInfo orderInfo;

    public OrderSteps(NgWebDriver driver, OrderInfoContext orderInfoContext)
    {
        this.driver = driver;
        this.orderInfoContext = orderInfoContext;
    }

    [When(@"I am creating new order")]
    public void WhenIAmCreatingNewOrder(Table table)
    {
        var orderListPage = new OrdersListPage(driver);
        orderInfo = orderListPage.CreateNewOrder(table.CreateInstance<OrderInfo>());
        orderInfoContext.OrderInfo = orderInfo;
    }
}

现在我可以在其他类(class)中使用存储的信息:

    [Binding]
public class BuyerPortalSteps
{
    private NgWebDriver driver;
    private OrderInfoContext orderInfoContext;

    public BuyerPortalSteps(NgWebDriver driver, OrderInfoContext orderInfoContext)
    {
        this.driver = driver;
        this.orderInfoContext = orderInfoContext;
    }

    [Then(@"I am looking for order on buyer statistics grid")]
    public void ThenIAmLookingForOrderOnBuyerStatisticsGrid()
    {
        BuyerPortalDashboard buyerPortalDashboard = new BuyerPortalDashboard(driver);
        buyerPortalDashboard.CheckBuyerDashboardStatistic(orderInfoContext.OrderInfo);
    }
}

我认为原因是如果你想在类之间共享数据你必须初始化这个数据一次并且永远不要尝试再次编辑它,因为它可以在你阅读它之前在途中的任何地方改变...... ..这只是我的假设

关于c# - Specflow上下文注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61085015/

相关文章:

c# - 如何在 Unity 3d 中跳转?

javascript - 如何调试 Protractor 中失败的测试步骤

规范流错误 : Force regenerate steps possible?

c# - 如何从 Active Directory 检索用户的登录名?

c# - WCF:无法满足对安全 token 的请求,因为身份验证失败

c# - ASP.NET 模板

sql-server - 自动将新数据从 MS Access 数据库导入 SQL Server

testing - Peoplesoft 测试框架存在操作

visual-studio-2013 - 如何格式化specflow .feature 文件

nunit - 如何使用 BDD 构建 CRUD 测试