C# 运行specflow Xamarin测试时无法解析错误基元类型或结构
我正在尝试使用与Xamarin集成的SpecFlow。在测试过程中,我能够插入所有应用程序(*.apk)并将其保存到登录页面,但随后出现错误:C# 运行specflow Xamarin测试时无法解析错误基元类型或结构,c#,android,xamarin,specflow,C#,Android,Xamarin,Specflow,我正在尝试使用与Xamarin集成的SpecFlow。在测试过程中,我能够插入所有应用程序(*.apk)并将其保存到登录页面,但随后出现错误: BoDi.ObjectContainerException was unhandled by user code HResult=-2146233088 Message=Primitive types or structs cannot be resolved: Xamarin.UITest.Platform (resolution path: VVM_
BoDi.ObjectContainerException was unhandled by user code
HResult=-2146233088
Message=Primitive types or structs cannot be resolved: Xamarin.UITest.Platform (resolution path: VVM_SpecFlow.LoginApplicationSteps)
Source=TechTalk.SpecFlow
StackTrace:
at BoDi.ObjectContainer.ResolveObject(RegistrationKey keyToResolve, ResolutionList resolutionPath)
at BoDi.ObjectContainer.Resolve(Type typeToResolve, ResolutionList resolutionPath, String name)
at BoDi.ObjectContainer.<>c__DisplayClass53_0.<ResolveArguments>b__0(ParameterInfo p)
at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at BoDi.ObjectContainer.ResolveArguments(IEnumerable`1 parameters, RegistrationKey keyToResolve, ResolutionList resolutionPath)
at BoDi.ObjectContainer.CreateObject(Type type, ResolutionList resolutionPath, RegistrationKey keyToResolve)
at BoDi.ObjectContainer.TypeRegistration.Resolve(ObjectContainer container, RegistrationKey keyToResolve, ResolutionList resolutionPath)
at BoDi.ObjectContainer.ResolveObject(RegistrationKey keyToResolve, ResolutionList resolutionPath)
at BoDi.ObjectContainer.Resolve(Type typeToResolve, ResolutionList resolutionPath, String name)
at BoDi.ObjectContainer.Resolve(Type typeToResolve, String name)
at TechTalk.SpecFlow.Infrastructure.BindingInstanceResolver.ResolveBindingInstance(Type bindingType, IObjectContainer scenarioContainer)
at lambda_method(Closure , IContextManager )
at TechTalk.SpecFlow.Bindings.BindingInvoker.InvokeBinding(IBinding binding, IContextManager contextManager, Object[] arguments, ITestTracer testTracer, TimeSpan& duration)
at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStepMatch(BindingMatch match, Object[] arguments)
at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStep(StepInstance stepInstance)
at TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.OnAfterLastStep()
at TechTalk.SpecFlow.TestRunner.CollectScenarioErrors()
at VVM___SpecFlow.LoginApplicationFeature.ScenarioCleanup()
at VVM___SpecFlow.LoginApplicationFeature.LoginWithValidCredentials() in <……..\SpecFlowFeature1.feature:line> 12
InnerException: a
BoDi.ObjectContainerException未由用户代码处理
HResult=-2146233088
Message=无法解析基元类型或结构:Xamarin.UITest.Platform(解析路径:VVM_SpecFlow.LoginApplicationSteps)
Source=TechTalk.SpecFlow
堆栈跟踪:
在BoDi.ObjectContainer.ResolveObject(RegistrationKey键到Resolution,ResolutionList resolutionPath)
在BoDi.ObjectContainer.Resolve处(键入typeToResolve、ResolutionList resolutionPath、字符串名称)
在BoDi.ObjectContainer.c__显示类53_0.b__0(参数信息p)
在System.Linq.Enumerable.WhereSelectArrayInterator`2.MoveNext()中
在System.Linq.Buffer`1..ctor处(IEnumerable`1源)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1源)
在BoDi.ObjectContainer.ResolveArguments处(IEnumerable`1参数、RegistrationKey keyToResolve、ResolutionList resolutionPath)
在BoDi.ObjectContainer.CreateObject(类型类型、ResolutionList resolutionPath、RegistrationKey keyToResolve)
在BoDi.ObjectContainer.TypeRegistration.Resolve(ObjectContainer容器,RegistrationKey键到Resolution,ResolutionList resolutionPath)
在BoDi.ObjectContainer.ResolveObject(RegistrationKey键到Resolution,ResolutionList resolutionPath)
在BoDi.ObjectContainer.Resolve处(键入typeToResolve、ResolutionList resolutionPath、字符串名称)
在BoDi.ObjectContainer.Resolve处(键入typeToResolve,字符串名)
位于TechTalk.SpecFlow.Infrastructure.BindingInstanceSolver.ResolveBindingInstance(类型bindingType,IObjectContainer scenarioContainer)
在lambda_方法(闭包,IContextManager)
位于TechTalk.SpecFlow.Bindings.BindingInvoker.InvokeBinding(IBinding绑定、IContextManager contextManager、对象[]参数、ITestTracer testTracer、时间跨度和持续时间)
在TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteTestepMatch(BindingMatch匹配,对象[]参数)
在TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteTEP(StepInstance StepInstance)
在TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.OnAfterLastStep()中
在TechTalk.SpecFlow.TestRunner.CollectScenarioErrors()上
在VVM__;u SpecFlow.LoginApplicationFeature.ScenarioCleanup()中
在12中的VVM__;u SpecFlow.LoginApplicationFeature.LoginWithValidCredentials()处
内部异常:a
我相信这是在specflow读取功能文件后发生的
有人能帮我吗?您的LoginApplicationSteps有一个参数为Xamarin.UITest.Platform的构造函数。这是给您带来麻烦的基本类型。
SpecFlow有一个集成的DI框架,用于解析绑定类。它使用构造函数注入。在您的情况下,它正在搜索平台枚举的注册,但这不起作用。 解决方案是将枚举包装在一个类中,并将其注册到BeforeCasenario钩子中(请参阅链接文档页面上的高级选项)
DI-framework的文档(在SpecFlow中称为上下文注入)在这里:您的LoginApplicationSteps有一个参数为Xamarin.UITest.Platform的构造函数。这是给您带来麻烦的基本类型。
SpecFlow有一个集成的DI框架,用于解析绑定类。它使用构造函数注入。在您的情况下,它正在搜索平台枚举的注册,但这不起作用。 解决方案是将枚举包装在一个类中,并将其注册到BeforeCasenario钩子中(请参阅链接文档页面上的高级选项)
DI-framework的文档(在SpecFlow中称为上下文注入)如下所示:如果有人在步骤类之间使用BoDi作为容器,这里是我解析原语类型的解决方法:
var test = (string)objectContainer.Resolve<object>("testString");
var test=(string)objectContainer.Resolve(“testString”);
如果有人使用BoDi作为步骤类之间的容器,这里是我解决原语类型的方法:
var test = (string)objectContainer.Resolve<object>("testString");
var test=(string)objectContainer.Resolve(“testString”);