gpt4 book ai didi

c# - 如何重构 specflow 数据表和 Testcontext 属性

转载 作者:太空宇宙 更新时间:2023-11-03 20:06:56 25 4
gpt4 key购买 nike

   Field                  Length    position     Value
TRANS LENGTH 4 5 1234
TRANS DEST 7 9 DEV
TRANS ORGN 7 16 PROD
TRANS DATE 6 23 2014-03-30
TRANS ID 4 35 44

读表

这里我使用字段作为键,{length, position, and value} 作为值

public class SpecFlowData
{
public string Field { get; set; }
public string Value { get; set; }
public string Position { get; set; }
public string Length { get; set; }

public Dictionary<string, SpecFlowData> GetData(Table table)
{
var data = table.CreateSet<SpecFlowData>().ToList();
var result = data
.ToDictionary(x => x.Field, x => new SpecFlowData
{
Value = x.Value,
Position = x.Position,
Length = x.Length
});
return result;
}
}


public class TestContext
{
public SpecFlowData TRANSLENGETH{ get; set; }
public SpecFlowData TRANSDEST{ get; set; }
public SpecFlowData TRANSORGN { get; set; }
public SpecFlowData TRANSDATE { get; set; }
public SpecFlowData TRANSID { get; set; }
}

在这里我试图填充值以便我可以做我的断言

  [Given(@"Request is sent with the following data:")]
public void GivenRequestIsSentWithTheFollowingData(Table table)
{
var data = SpecFlowData.GetRequestData(table);
TestContext.TRANSLENGETH= data["TRANSLENGETH"];
TestContext.TRANSDEST= data["TRANSDEST"];
TestContext.TRANSORGN = data["TRANSORGN "];

}

[Then(@"Response will contain the expected data:")]
public void ThenResponseWillContainTheExpectedData()

{

var Response = "HERE I HAVE the string response message that I am asserting ";

Assert.AreEqual(Response.Substring(TestContext.TransLength.Position, TestContext.TransLength.Length), TestContext.TransLength);
Assert.AreEqual(Response.Substring(TestContext.TransDest.Position, TestContext.TransDest.Length), TestContext.TransDest);
...... more TestContext properties to be asserted.

}

但这接缝就像一个冗余代码。我怎样才能重构它?

最佳答案

你可以简单地使用索引器来获取你的值,因为你有一个字典,你不需要使用 FirstOrDefault方法,只需指定键,然后指定值的索引:

string value = data["TRANS ID"][0];
string position = data["TRANS ID"][1];
string length = data["TRANS ID"][2];

但是,我会使用 Dictionary<string, SpecFlowData>而不是 Dictionary<string, IList<string>>然后像这样更改方法:

public Dictionary<string,  SpecFlowData> GetData(Table table)
{
var data = table.CreateSet<SpecFlowData>().ToList();
var result = data
.ToDictionary(x => x.Field, x => new SpecFlowData
{
Value = x.Value,
Position = x.Position,
Length = x.Length
});
return result;
}

然后像这样获取值:

 string value = data["TRANS ID"].Value;
string position = data["TRANS ID"].Position;
string length = data["TRANS ID"].Length;

关于c# - 如何重构 specflow 数据表和 Testcontext 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22735235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com