首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring (@SpyBean)诉Mockito(@Spy)

Spring (@SpyBean)诉Mockito(@Spy)
EN

Stack Overflow用户
提问于 2019-02-15 12:39:16
回答 2查看 13.4K关注 0票数 10

@SpyBeanorg.springframework.boot.test.mock.mockito.SpyBean@Spyorg.mockito.Spy有什么区别?

使用@SpyBean而不是@Spy使我的测试失败。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-18 08:17:07

@Spy 文档说:

带有@Spy注释的字段可以在声明点显式初始化。或者,如果不提供实例,Mockito将尝试找到零参数构造函数(甚至是私有构造函数),并为您创建一个实例。

@SpyBean 文档说:

注释,可用于将Mockito间谍应用于Spring ApplicationContext。 同一类型上下文中的所有bean都将与间谍一起包装。如果未定义现有bean,则将添加一个新bean。

因此,主要的区别是@SpyBean是一个Spring特定的注释,但是@Spy是Mockito本身的一部分。@SpyBean@Spy基本上都是这样做的,但是@SpyBean可以解决特定于Spring的依赖关系,例如@Autowired@Spy只能使用空构造函数创建对象。

票数 16
EN

Stack Overflow用户

发布于 2021-03-03 08:21:56

我在测试期间注意到的是,SpyBean可能导致某些值在测试之间结转,而Spy总是从一个干净的板子开始。在我的例子中,我将@SpyBean设置在一个类上,该类最初具有自动设置的组件。但是,在重构了类以删除它们之后,我没有更改测试类,并且发生了意外的失败。

代码语言:javascript
复制
Class1 {
boolean boo;

myMethodA() {
    if (something) {
        boo=true;
    }
}

myMethodB() {
    if (boo) {
      doThis();
    } else { 
      doThat();
    }
  }
}

Test1和Test2都使用@SpyBean Class1。Test1和Test2都成功地独立运行,但是当作为一个套件运行时,如果它运行在Test1之后,Test2就会失败。

Test1将Class1中的布尔值设置为true,但Test2运行时仍为真。这导致Test2失败,因为它期望布尔值为false。更改为@Spy Class1会导致布尔值重置为false,并且两个测试都会通过。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54709589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档