如何遍历NUnit .runsettings文件中的多个TestRunParameters?
问题
我有一个简单的NUnit .runsettings文件,内容如下:
<?xml version="1.0" encoding="utf-8"?> <RunSettings> <TestRunParameters> <Parameter name="someParameterName" value="someExampleValue" /> <Parameter name="variable1" value="someExampleValue" /> <Parameter name="variable2" value="someExampleValue" /> </TestRunParameters> </RunSettings>
我希望遍历这些TestRunParameters,而非按名称逐个访问。目前我可以通过以下代码获取单个参数值:
var value = TestContext.Parameters["someParameterName"];
但尝试用foreach遍历所有参数时失败:
var allParams = TestContext.Parameters; foreach (var item in allParams) { // 此处想要获取参数的名称和值 }
触发编译错误:
Compiler Error CS1579 foreach statement cannot operate on variables of type 'type1' because 'type2' does not contain a public definition for 'identifier'
请问我忽略了什么?
解答
问题出在TestContext.Parameters的类型是TestParameters,它并没有直接实现可枚举的泛型接口(比如IEnumerable<KeyValuePair<string, string>>),所以不能直接用foreach遍历整个对象。
你可以通过以下两种方式遍历所有参数:
- 遍历Keys集合,再逐个获取值
var parameters = TestContext.Parameters; foreach (var key in parameters.Keys) { var value = parameters[key]; // 使用key和value做后续处理 }
- 将TestParameters转换为可枚举的键值对集合
利用Cast方法将其转换为DictionaryEntry的枚举,再提取键和值:
var allParams = TestContext.Parameters.Cast<DictionaryEntry>(); foreach (var entry in allParams) { var paramName = (string)entry.Key; var paramValue = (string)entry.Value; // 处理参数名和值 }
这两种方式都能实现遍历所有TestRunParameters的需求,选择哪种取决于你的代码习惯。
内容的提问来源于stack exchange,提问作者samantha
相关产品推荐
相关产品推荐

