如何通过依赖注入使用空手道 (Picocontainer)

How to use Karate with dependency Injection (Picocontainer)

我有一个项目,我使用黄瓜、rest-assured、selenium 和 Appium,我正在尝试将 API 测试转移到 Karate 并且无法将它与 pom.xml 中的 picocontainer 依赖项一起使用.

    org.picocontainer.injectors.AbstractInjector$UnsatisfiableDependenciesException: com.intuit.karate.ScriptEnv has unsatisfied dependency 'interface com.intuit.karate.cucumber.KarateReporter' for constructor 'public com.intuit.karate.ScriptEnv(java.lang.String,java.io.File,java.lang.String,java.lang.ClassLoader,com.intuit.karate.cucumber.KarateReporter)' from org.picocontainer.DefaultPicoContainer@66ac5762:11<|
at org.picocontainer.injectors.ConstructorInjector.getGreediestSatisfiableConstructor(ConstructorInjector.java:191)
  at org.picocontainer.injectors.ConstructorInjector.getGreediestSatisfiableConstructor(ConstructorInjector.java:110)
  at org.picocontainer.injectors.ConstructorInjector.access0(ConstructorInjector.java:51)
  at org.picocontainer.injectors.ConstructorInjector.run(ConstructorInjector.java:331)
  at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
  at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
  at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.getComponentInstance(AbstractInjectionFactory.java:56)
  at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
  at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
  at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:699)
  at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:647)
  at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:632)
  at org.picocontainer.parameters.BasicComponentParameter.resolveInstance(BasicComponentParameter.java:118)
  at org.picocontainer.parameters.ComponentParameter.resolveInstance(ComponentParameter.java:136)
  at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
  at org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
  at org.picocontainer.injectors.ConstructorInjector.run(ConstructorInjector.java:335)
  at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
  at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
  at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.getComponentInstance(AbstractInjectionFactory.java:56)
  at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
  at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
  at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:699)
  at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:647)
  at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:678)
  at cucumber.runtime.java.picocontainer.PicoFactory.getInstance(PicoFactory.java:40)
  at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:38)
  at cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)
  at cucumber.runtime.Runtime.runStep(Runtime.java:300)
  at cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44)
  at cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)
  at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44)
  at cucumber.runtime.model.CucumberFeature.run(CucumberFeature.java:165)
  at cucumber.runtime.Runtime.run(Runtime.java:122)
  at cucumber.api.cli.Main.run(Main.java:36)
  at cucumber.api.cli.Main.main(Main.java:18)

How can I add karate setup with dependency injection like picocontainer.

空手道不支持 Cucumber DI,实际上也不需要它。

因为您可以很容易地调用 Java 代码和 re-use 如果需要:https://github.com/intuit/karate#calling-java

但我们鼓励您尽可能先学空手道,然后学 JS,这样您才能获得最大收益。