如何使用FitNesse和Slim将对象传递给Method

时间:2013-11-14 19:26:52

标签: c# fitnesse fitnesse-slim

我正在使用FitNesse和SLIM,我希望能够将对象传递给方法,但似乎无法找到方法?你是如何使用SLIM做到这一点的?

例如,我想构建一个调用对象

!|FitTesting.MakeCall                             |
|ANI       |Call Type|Call Id|Call Key No| Data|
|4403951403|2        |2000   |8000       |5000 |

我想将该对象存储在符号或变量名称CallObject

然后我想在Start Call方法中使用该对象。

|script | FitTesting.PracticeCallTestFixture|
|Initialize Call Fixture|
|Start Call|<<With Call Object>>
|check|Check For Call|true|
|Finalize Phone Desktop|

我尝试使用字典但得到以下异常

EXCEPTION_:fitSharp.Machine.Exception.ParseException1[System.String]: Parse parameter 1 for 'UpdateECCData' type System.Collections.Generic.Dictionary2[System.String,System.String] failed. ---> System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
   at fitSharp.Machine.Model.BranchList1.get_Item(Int32 index)
   at fitSharp.Slim.Operators.ParseDictionary.Parse(Type type, TypedValue instance, Tree1 parameters)
   at fitSharp.Machine.Engine.ProcessorBase2.<>c__DisplayClass11.<>c__DisplayClass13.<Parse>b__10(ParseOperator1 o)
   at fitSharp.Machine.Engine.ProcessorBase2.<>c__DisplayClass11.<Parse>b__e(OperationLogging logging)
   at fitSharp.Machine.Engine.ProcessorBase2.DoLoggedOperation[R](String startMessage, Func2 operation)
   at fitSharp.Machine.Engine.ParameterList1.ParseParameterValue(RuntimeMember member, TypedValue instance, Tree1 parameter, Int32 parameterIndex)
   --- End of inner exception stack trace ---
   at fitSharp.Machine.Engine.ParameterList1.ParseParameterValue(RuntimeMember member, TypedValue instance, Tree1 parameter, Int32 parameterIndex)
   at fitSharp.Machine.Engine.ParameterList1.<>c_DisplayClass1.b_0(List1 parameterList, Tree1 parameter)
   at System.Linq.Enumerable.Aggregate[TSource,TAccumulate](IEnumerable1 source, TAccumulate seed, Func3 func)
   at fitSharp.Machine.Engine.ParameterList1.GetParameterList(TypedValue instance, Tree1 parameters, RuntimeMember member)
   at fitSharp.Machine.Engine.InvokeDefault2.Invoke(TypedValue instance, String memberName, Tree1 parameters)
   at fitSharp.Slim.Operators.InvokeLibrary.Invoke(TypedValue instance, String memberName, Tree1 parameters)
   at fitSharp.Machine.Engine.ProcessorBase2.<>c_DisplayClass18.<>c_DisplayClass1a.b_17(InvokeOperator1 o)
   at fitSharp.Machine.Engine.ProcessorBase2.<>c_DisplayClass18.b_15(OperationLogging logging)
   at fitSharp.Machine.Engine.ProcessorBase2.DoLoggedOperation[R](String startMessage, Func2 operation)
   at fitSharp.Slim.Operators.InvokeInstructionBase.InvokeMember(Tree1 parameters, Int32 memberIndex)
   at fitSharp.Slim.Operators.ExecuteCall.ExecuteOperation(Tree1 parameters)
   at fitSharp.Slim.Operators.InvokeInstructionBase.Invoke(TypedValue instance, String memberName, Tree`1 parameters)

这是适合标记

1[System.String]: Parse parameter 1 for 'UpdateECCData' type System.Collections.Generic.Dictionary

这是我的方法调用

1.get_Item(Int32 index)
   at fitSharp.Slim.Operators.ParseDictionary.Parse(Type type, TypedValue instance, Tree

2 个答案:

答案 0 :(得分:0)

对于c#我不知道。对于Java,您可以注册custom type,或者重写方法以接受Hashtable(即Dictionary)并使用Hash widget

答案 1 :(得分:0)

您还可以以Json格式传递Fitnesse中的参数,然后在代码中实现一个从json转换为Dictionnary的方法。 我所做的 - 使用Java - 如下:

  1. 在Fitnesse中传递一个包含jsonFormat的字符串。例如{"username":"xxx", "password":"yyy"}
  2. 在代码中,该方法执行以下操作:

    public void login(String credentials){ Map<String,String> cred = (Map<String, String>)JSONValue.parse(credentials); }

  3. 在这种情况下,你只会在Fitnesse方面处理json。你只需要改变将json转换为map的方式(json到C#中的字典) 希望这有点帮助。