c# - Specflow 上下文注入
问题描述
这是关于specflow中的上下文注入的问题。我和我的实体上课:
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; }
}
我的 Binding 类有一些变化:
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;
}
}
现在我可以在我的其他类中使用存储的信息:
[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);
}
}
我认为原因是,如果你想在类之间共享数据,你必须初始化这个数据一次,并且永远不要再次尝试编辑它,因为它可以在你阅读它之前的任何地方进行更改......这个只是我的假设
推荐阅读
- java - 在 JUnit 测试中模拟日期格式(SimpleDateFormat)
- highcharts - Highstock - 仅在虚线上启用标记
- ubuntu - 如何使用带有本机 fps 的 ffmpeg 进行流式传输
- python - 根据条件为选定列的行着色
- arduino-uno - 我的 esp8266 使用缓存如何修复
- c++ - 如何使用阻塞套接字 API 添加消息发送操作 (smtp) 的进度?
- scala - Spark 数据集到 parquet 文件的转换
- c++ - 模板中的 C++ 数据类型
- javascript - 如何动态地将列添加到html?
- php - 从数据库中的字段中减去一个值