当前位置: 首页 > 编程语言 > C#

Spec-flow表数据如何转换成不同值分享

时间:2023-04-10 19:38:45 C#

Spec-flow表数据如何转换成不同值我需要转换通过table.CreateInstance()或table.get获得的Spec。CreateSet()-流表数据。我正在使用Specflow进行数据库测试,在某些情况下Table字段值需要映射到不同的值,因为DB表存储的是代码而不是我们在函数文件表中输入的值。我不想将代码包含在函数文件中,因为它会降低可读性。例如,如果我如下所述为状态输入Single,我希望它在数据传输对象/POCO中映射或转换为S。做这个的最好方式是什么?提前致谢。鉴于我在新帐户表格中输入了以下数据:|名称|生日|状态||约翰布彻|1902年2月2日|单身|我不知道会自动执行此操作,所以我只能想到两种可能性。不要使用CreateInstance或CreateSet方法,而是手动执行所有映射,但将其包装在您正在使用的[StepArgumentTransformation]方法中,然后在创建实例后用“S”覆盖自动生成的“Single”值。我从一个“测试模型”开始,它最终成为我的规范流测试的视图模型。使用您的示例:鉴于我在新帐户表单中输入了以下数据:|名称|生日|状态||约翰布彻|1902年2月2日|单身|领域模型:publicclassAccount{publicstringName{get;放;公共日期时间?生日{得到;放;}公共字符串状态{得到;放;}}和“测试模型”:publicclassAccountForm{publicstringName{get;放;公共日期时间?}公共字符串状态{得到;放;}publicAccountCreateInstance(){returnnewAccount(){Name=Name,Birthdate=Birthdate,Status=Status.Substring(0,1)};}}步骤定义:[Given(@"GivenIenteredthefollowingdataintothenewaccountform:")]publicvoidGivenIEteredTheFollowingDataIntoTheNewAccountForm(Tabletable){varform=table.CreateInstance();varaccount=form.CreateInstance();//保存到数据库}对于这个特定的例子,它可能比你需要的更多,但我发现当场景中的数据需要采用人类可读的格式时,这种模式很有效,后者在你的域模型转换为复杂的格式。正如Sam指出的那样,我们可以使用StepArgumentTransformarion或类似下面的东西。如果要将Value1映射到一种类型的Code1并将Value1映射到另一种类型的Code1并使用typeof(T).Name.Equals(typeof(yourtype).Name)作为条件,则在扩展方法publicstaticIEnumerableCreateSetWithValueTransfer(这个表table){varmapper=newDictionary(StringComparer.InvariantCultureIgnoreCase){{"Value1","Code1"},{"value2","Code2"}};varset=ChangeValues(table,mapper);返回set.CreateSet();}privatestaticTableChangeValues(Tabletable,Dictionarymapper){varmappedTable=newTable(table.Header.ToArray());foreach(varrowintable.Rows){mappedTable.AddRow(row.Values.Select(x=>mapper.ContainsKey(x)?mapper[x]:x).ToArray());}返回映射表;我在这里问了一个类似的问题。看起来应该可以将StepArgumentTransforms应用于CreateInstance/CreateSet,但它尚未针对已在表转换中转换的基本类型实现。在您的情况下(与我的情况不同),我认为您可以使用自定义ValueRetriever相对轻松地完成此操作。以上就是C#学习教程:Spec-flow表数据如何转换成不同值的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: