如何重新计算规范流数据表和测试上下文属性

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)

但这种接缝就像冗余代码.我怎样才能重新考虑它?

Sel*_*enç 5

您可以简单地使用索引器来获取您的值,因为您有一个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)