问题标签 [picocontainer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
488 浏览

dependency-injection - PicoContainer JSR-330 @Named 支持?

PicoContainer 似乎表明它支持 JSR-330@Inject@Named. (不,这个其他问题似乎没有帮助,因为它没有解决 PicoContainer 站点说已添加对 JSR-330 的一些支持这一事实。)

我像这样向容器中添加一些东西:

我用以下标记构造函数参数@Named

但是当我尝试获取Foo实例时,PicoContainer 抱怨它有太多Bar实例可供选择。

问题 1:如何让 PicoContainer@Named用于构造函数注入?

然后我尝试在里面使用字段注入Foo.java

那也行不通。

问题 2:如何让 PicoContainer 使用@Inject@Named用于构造函数注入?

还是PicoContainer 新闻页面错了,根本没有任何 PicoContainer 2.x 对 JSR-330 的支持?

0 投票
1 回答
1670 浏览

java - Cucumber-jvm 指定的参数与以下任何构造函数都不匹配:[private java.lang.Class()];

我正在 Android 上测试一个简单的 Cucumber BDD 测试并得到一个黄瓜错误

我无法弄清楚这个错误来自哪里。我错过了什么吗?

我的功能文件

步骤定义

笔记:

  • 安卓工作室:1.0.2
  • 摇篮:2.2.1
  • 黄瓜:1.2.0
  • 浓缩咖啡:2.0
0 投票
1 回答
893 浏览

java - 如何让 PicoContainer 启动/停止/处置工厂注入的组件?

我有一个缓存所有组件的 PicoContainer。由于它缓存了所有组件,我希望它在容器生命周期的适当时间点调用start, 。stopdispose

但是,我发现如果我使用 a 构造一个组件FactoryInjector,这些方法根本不会被调用,尽管该组件也被缓存了。

举个例子:

运行它的输出如下:

以此类推start(),我创建并作为实例注入的组件启动。我通过构造函数注入注入的组件被构造然后启动。但是从我通过工厂注入的组件中看不到任何东西。

就文档而言,shows 和 methods 的 Javadoc似乎FactoryInjector是为工厂本身做自己的生命周期的东西,而不是工厂旋转出来的组件。#start#stop#dispose

快速查看源代码表明适配器实现ComponentLifecycle将调用其方法,但尚不清楚如何将其挂钩。如果我查看其他实现类,几乎所有东西似乎都委托给其他东西,使其成为很难弄清楚到底发生了什么。

这样做的正确方法是什么?有没有合适的方法来做到这一点?

0 投票
6 回答
13631 浏览

java - 项目无法识别 cucumber-picocontainer 依赖项

我目前正在使用黄瓜、JUnit 和 Selenium 开发一个 java 测试框架。我已经从事过这样的项目,但我在这个项目上遇到了问题。

我正在尝试创建一个单例的 Context 类。我想使用 cucumber-picocontainer 让这个类在每个步骤定义类中都可以访问。我在 pom.xml 中添加了依赖项,但每次尝试执行测试时,都会出现异常:“NewLoginSteps 没有空构造函数。如果需要 DI,请将 cucumber-picocontainer 放在类路径中” . 我尝试手动导入罐子,但没有帮助。

这是我的配置示例:

  • pom.xml

    /li>

测试上下文.java:

一个步骤定义类:

我的 superSepts 类:

你知道我做错了什么吗?我已经使用 picocontainer 来做同样的事情并且它正在工作。

0 投票
1 回答
1047 浏览

java - 使用 Cucumber、PicoContainer 和 Conductor 框架定义多态步骤

我遇到的问题是在每个 Cucumber 场景运行后机车都没有被终止。然后我留下了孤立的 Selenium 进程,例如:

这是我的 PicoContainer 设置类,以便它将 Locomotive 的实例注入每个 Cucumber 场景(它确实如此):

此条目在我的 cucumber.properties 文件中:

这是一个示例步骤定义类:

在每个场景运行后我可以调用某种清理方法吗?还是一种更好的方式来做我想要实现的目标?

0 投票
1 回答
536 浏览

dependency-injection - 向 Pico Container 注册实现列表

我有一个界面

我有这个接口的实现列表:

我想用 Pico Container 做什么:

  1. 注册IInterface的所有实现,以便能够将它们解析为列表:

    /li>
  2. 另一种选择是能够使用命名键注册实现:

    能够执行以下操作:

    /li>

是否有至少第一个问题的内置解决方案?

UPD

  1. 在 Pico 中发现这个实现非常奇怪且不直观。

为了能够注入一个数组,它是必要的:

这将注入所有实现的数组。但这种行为非常不清楚,也不直观。至于我,最好注册对。

0 投票
0 回答
388 浏览

selenium - 构建黄瓜以支持在测试金字塔中测试服务和 ui 层

我已经设置 cucumber 来处理服务(例如 Web 服务 API)级别测试和 UI(例如浏览器 DOM)级别测试。

我使用标签来做到这一点。我用@api标签标记每个 API 级别的场景。在我的 @Before 场景钩子中是一个 if 语句,它检查场景.getSourceTagNames() 是否包含@api。如果未检测到@api,则初始化驱动程序并创建浏览器实例。

由于我的测试使用的是 PageObject 范例,因此步骤定义不受每个页面的 HTML 详细信息的影响。这让我想知道是否可以使用依赖注入来控制加载两组 PageObject 类中的哪一组。第一组将绕过 Selenium 浏览器并直接访问服务器端点以获取要处理的值并发送回步骤定义。第二组将加载 selenium PageObject 类并通过浏览器来满足步骤定义调用。显然,第一组将在比第二组更短(经过)的时间内执行。

所以我开始上网搜索看看其他人做了什么。我看到了 Aslak Hellesøy 的这篇博文。阿斯拉克有话要说:

*“了解测试金字塔的好处的 Cucumber 高级用户更愿意针对中间层运行大多数场景(不通过 UI)。然后他们会选择相同场景的一小部分来运行 UI 并运行那些分开的。

如果您将所有自动化逻辑保留在 AutomationApi 接口后面,您可以提供两种不同的实现——一种直接与域模型对话,另一种使用 Selenium WebDriver 或另一个 UI 自动化库。"*

给定一个 Jenkins CI 服务器,第 1 步是构建软件,第 2 步是运行单元测试,第 3 步是运行域(Web 服务器 API)测试,第 4 步是运行 UI(例如 Web)测试。从而实现了测试金字塔

有人实现了 Aslak 的想法吗?如果是,场景之间是否存在实际重叠?也就是说,您是否使用 PageObjects 的 API 实现(例如在您的开发环境中)和 HTML(Selenium)PageObject 实现(例如在 CI 上)运行相同的场景?还是测试场景仅是 API xor web?

0 投票
1 回答
1417 浏览

javascript - 在设计页面对象模型时尝试 BDD cucumber Selenium 时出现此错误

线程“主” cucumber.runtime.CucumberException 中的异常:java.lang.AbstractMethodError:cucumber.runtime.java.picocontainer.PicoFactory.addClass(Ljava/lang/Class;)V 在 cucumber.runtime.java.JavaBackend.addStepDefinition(JavaBackend .java:154) 在 cucumber.runtime.java.MethodScanner.scan(MethodScanner.java:68) 在 cucumber.runtime.java.MethodScanner.scan(MethodScanner.java:41) 在 cucumber.runtime.java.JavaBackend.loadGlue( JavaBackend.java:86) 在 cucumber.runtime.Runtime.(Runtime.java:91) 在 cucumber.runtime.Runtime.(Runtime.java:69) 在 cucumber.runtime.Runtime.(Runtime.java:65) 在 cucumber .api.cli.Main.run(Main.java:35) at cucumber.api.cli.Main.main(Main.java:18) 原因:java.lang.AbstractMethodError: cucumber.runtime.java.picocontainer.PicoFactory .addClass(Ljava/lang/Class;)V 在 cucumber.runtime.java.JavaBackend.addStepDefinition(JavaBackend.java:149) ... 还有 8 个

0 投票
1 回答
730 浏览

scala - 在 Cucumber 步骤定义之间传递变量

在 Cucumber 中,我如何在步骤定义类之间传递变量。我试图在 Scala 中实现。

环顾四周,我看到人们建议使用 Guice 或 Picocontainer 或任何其他 DI 框架。但是在 Scala 中还没有真正遇到过一个例子。

例如,对于下面的示例,如何使用 DI 传递变量?

提供者.scala,

消费者.scala,

0 投票
1 回答
1541 浏览

kotlin - 为什么在 Kotlin 中运行这个特定的 Cucumber 步骤时会出现 ArrayIndexOutOfBoundsException?

我正在使用 Java8 和 PicoContainer 运行 Cucumber JVM 功能文件。我已经删除了这些步骤,所以它们是空的,但我仍然遇到错误。这是我的特点:

(是的,这是一个完整的旅程,而不是 BDD 场景。)

无论出于何种原因,在 Kotlin 中运行此步骤都会导致错误:

虽然这个 Java 类运行得很好:

我完全感到困惑,尤其是因为 Kotlin 步骤类中的“然后”运行良好,而其他步骤运行没有错误:

亚军,完成:

堆栈跟踪是:

这是怎么回事?

当前使用 Kotlin 步骤签入的所有源代码都已在此处注释掉。(请原谅我的混乱,因为我对我正在使用的很多东西都是新手;从最初的峰值重构正在进行中。)