HXD*_*HXD 1 .net c# dictionary key-value
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
Run Code Online (Sandbox Code Playgroud)
读表
在这里,我使用字段作为键,{长度,位置和值}作为值
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; }
}
Run Code Online (Sandbox Code Playgroud)
在这里,我试图填充值,以便我可以做我的断言
[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.
}
Run Code Online (Sandbox Code Playgroud)
但这种接缝就像冗余代码.我怎样才能重新考虑它?
您可以简单地使用索引器来获取您的值,因为您有一个Dictionary,您不需要使用FirstOrDefault方法,只需指定键,然后指定值的索引:
string value = data["TRANS ID"][0];
string position = data["TRANS ID"][1];
string length = data["TRANS ID"][2];
Run Code Online (Sandbox Code Playgroud)
但是,我会使用a 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;
}
Run Code Online (Sandbox Code Playgroud)
然后得到这样的值:
string value = data["TRANS ID"].Value;
string position = data["TRANS ID"].Position;
string length = data["TRANS ID"].Length;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
936 次 |
| 最近记录: |