问题标签 [springockito]

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 投票
2 回答
602 浏览

java - 测试执行期间上下文中的模拟对象

我正在开发一个同时具有组件和集成测试的应用程序。两者之间的区别在于:组件测试测试多个类(即,它的内部对象并未全部模拟出来 - 但其中一些可能是 [例如 JMS 发布者]),而集成测试是一种测试一切都被嘲笑了。换句话说,Spring 为您提供了对象,然后您按原样对其进行测试。

到目前为止,一切都很好。

问题是:为了能够从 Spring 上下文中替换一个或另一个依赖项,我使用了 Springockito ( https://bitbucket.org/kubek2k/springockito/wiki/Home ),它为您提供了一种模拟一些 bean 的方法来自 Spring 上下文。

所以 - 在组件测试中 - 我有这个:

Bean 具有 SomeServiceInterface 作为依赖项。

在上述情况下, SomeServiceInterface 将被模拟替换。当然,这个例子是对问题的过度简化——我用模拟对象替换了 bean,这些模拟对象是对象图中的依赖项。

值得注意的是,我从这个文件加载了上下文:spring-classify-test.xml 另外值得注意的是,我在执行类之后将上下文标记为脏 - 所以,AFAIK,下一个测试类必须重新加载上下文。

现在进行集成测试:

我从 spring-service-integration-test.xml 加载上下文 - 但是 Bean 内部的 SomeServiceInterface 仍然被嘲笑!集成测试中使用的上下文也发生了变化!

如果我用 @DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) 标记集成测试,则类中的第一个测试将失败,因为 SomeServiceInterface 被模拟 - 但下一个测试将通过,因为上下文已经刷新。

有趣的是:

如果我要求 Spring 在集成测试中注入 SomeServiceInterface,它将注入 SomeServiceInterface 的具体实现——而不是模拟!

我已经尝试了很多方法来解决这个问题:

  1. 使用上下文中的 registerBeanDefinition 方法完成组件测试后,以编程方式覆盖上下文中的 bean

  2. 创建一个 TestExecution 侦听器,以便我可以在执行 IntegrationTest 之前尝试手动刷新上下文

  3. 对不同的上下文使用相同的加载器......

  4. 这个故事一直在继续。

有人有什么主意吗?

PS:我很理解采用 Springockito 是一个可疑的想法 - 但这个决定不是我做出的,现在我们在项目中有超过 500 个测试 - 因此重构它们以删除 Springockito 将是一项漫长的任务,因此它不是可行的期权 ATM。

0 投票
2 回答
6210 浏览

java - @ReplaceWithMock 与 @Qualifier

我正在使用springockito-annotations 1.0.9集成测试。

我有以下控制器:

在测试中,我将使用@ReplaceWithMock注释从上下文中替换 bean。

但不幸的是,它仅适用于没有@Qualifier注释的依赖项。

即,我的测试如下所示:

在初始化上下文后的最后一种情况下,只有DateCalculator 和 Accessor bean 正确替换为所需的模拟,但另一个 bean 自动装配为来自 main context 的普通 bean

调试后我发现QualifierAnnotationAutowireCandidateResolver无法正确识别 bean。在以下从229开始的行中:

Spring 试图从mocked dependency中提取限定符,但它是空的。

很高兴知道如何用@Qualifier 正确替换依赖项来模拟对象。

0 投票
1 回答
319 浏览

java - 为什么 spring 尝试将依赖项注入到模拟对象中?

我对 Mockito 很陌生,有一个问题。

我正在为我的应用程序使用 Spring 的依赖注入并尝试测试组件。我有一个这样的测试:

上下文类:

测试豆类:

另一个TestBean.class:

现在,如果我运行此代码,我会收到由以下原因引起的错误:

org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖找到[info.imapping.application.configuration.context.AnotherTestBean]类型的合格bean:预计至少有1个bean有资格作为此依赖的自动装配候选者。依赖注解:{@org.springframework.beans.factory.annotation.Autowired(required=true)}

这意味着 Spring 试图将依赖项注入到我的模拟 bean 中。有人可以告诉我如何防止这种行为吗?

如果我@ReplaceWithMock在我的中使用TestClass,它可以工作。但我更喜欢在上下文文件中设置我的模型。

0 投票
1 回答
241 浏览

testing - 进行 mvn install 时模拟测试失败

我有以下测试,它在 IDE 中执行时可以成功运行,但是当我执行 mvn install 时,它会失败并显示下面的 msg

下面是测试类:

我是否需要任何其他额外的配置才能让它在 maven 中工作?

更新 在 IDE 和 maven 的结果行为之间进行了进一步分析。我在测试方法中添加了下面的代码,发现从 IDE 运行时 object1 以模拟形式出现并返回 true,但从 maven 测试运行时打印为 false。知道为什么会发生这种情况

0 投票
1 回答
393 浏览

spring - 如何在 SpringConfiguration 中注入模拟 bean 以创建另一个 bean。?

我有单元测试的问题。下面是示例代码片段。我模拟了一个bean并注入@configuration类并使用模拟属性创建另一个bean。

在下面,如果我检查,b.getSomething() 会返回默认值,例如“”表示字符串,0 表示 int。等等。我没有得到嘲笑的价值。知道该怎么做吗?

0 投票
1 回答
2869 浏览

mocking - 模拟静态函数调用时出错

我正在尝试模拟静态但收到如下错误消息

我的测试类实现就像

我尝试了很多论坛上可用的东西,但同样的问题。

我在这里缺少什么?

编辑:新的异常日志

0 投票
2 回答
491 浏览

java - @ContextConfiguration is not inherited with Springockito

I am currently playing around with springockito-annotations and this requires @RunWith and @ContextConfiguration annotations in order to work. I would like to put these annotations on a superclass of my tests, but can't seem to get it to work.

Superclass:

Example testclass:

With this code, myService is not replaced with a mock.

But, if I change it to...

...it works.

Is there a way to avoid having to add @ContextConfiguration to all my test classes? Has this perhaps been fixed in a newer version of Spring/Spring-tests? From what I can tell it is able to inherit the locations part from the superclass without annotating the subclass, but the loader part does not work without an annotation in the subclass. I'm using version 3.2.1.RELEASE of Spring-test.

Here is a sample projec that shows the bug:

http://www.filedropper.com/springockitobug

0 投票
1 回答
430 浏览

spring - Mockito 间谍 - verify() 调用方法而不是检查

我正在尝试使用 Springockito 和间谍来验证在端到端测试期间是否在服务方法上进行了调用。我正在自动装配该过程也将获得的服务,并对其进行监视。虽然对 myService 实例进行了检测,但 verify() 不会验证之前的调用,而是调用原始方法并传递一个 null 参数。为什么是这样?

0 投票
3 回答
806 浏览

spring - springockito xsd 链接已损坏

Springockito的位置mockito.xsd似乎坏了。

我们用了
xsi:schemaLocation="http://www.mockito.org/spring/mockito https://bitbucket.org/kubek2k/springockito/raw/tip/springockito/src/main/resources/spring/mockito.xsd

但这不再起作用。有人知道当前的 URI 吗?

0 投票
1 回答
109 浏览

java - Java Spring:在多个文件中模拟上下文

试图为单元测试目的制作模拟的 Spring Context。我们的 Spring 配置非常大,至于现在尝试使用 Spring + Springockito Annotations 来获得这个东西。

我偶然发现的问题是我希望有多个 Java 类来处理上下文创建/模拟。就目前而言,这看起来像这样(假设 A 类将 B 类和 ClassC 列表作为构造函数参数):

问题是 C 子类列表远远大于我在这里想要的(更不用说我将全部责任放在一个类上),所以我想到了另一个类来处理这样的创建:

ListProvider.java:

配置器.java:

但是问题来了,即使 ListProvider 将被正确地自动装配,它也不会使用@ContextConfiguration类并且它不会找到任何 ClassC 子类,除非我不会在 中提供所有内容Configurator.java,这正是我想要避免的.

将此上下文配置拆分为多个文件是否有更改?