【问题标题】:Error Primitive types or structs cannot be resolved when running specflow Xamarin test运行 specflow Xamarin 测试时无法解析错误原始类型或结构
【发布时间】:2018-09-11 09:02:15
【问题描述】:

我正在尝试使用与 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_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

我相信这是在 specflow 读取功能文件后发生的。

谁能帮帮我?

【问题讨论】:

    标签: c# android xamarin specflow


    【解决方案1】:

    您的 LoginApplicationSteps 有一个带有参数 Xamarin.UITest.Platform 的构造函数。这是给你带来麻烦的原始类型。
    SpecFlow 有一个集成的 DI 框架,用于解析绑定类。它使用构造函数注入。在您的情况下,它正在搜索平台枚举的注册,这不起作用。 解决方案是将枚举包装在一个类中并将其注册到 BeforeScenario 挂钩中(请参阅链接文档页面上的高级选项)。

    DI 框架(在 SpecFlow 中称为上下文注入)的文档在这里:http://specflow.org/documentation/Context-Injection/

    【讨论】:

      【解决方案2】:

      如果有人在步骤类之间使用 BoDi 作为容器,这是我解决原始类型的解决方法:

      var test = (string)objectContainer.Resolve<object>("testString");
      

      【讨论】:

        猜你喜欢
        • 2020-03-17
        • 1970-01-01
        • 2023-01-13
        • 2012-11-19
        • 1970-01-01
        • 1970-01-01
        • 2018-03-12
        • 2022-01-02
        • 1970-01-01
        相关资源
        最近更新 更多