当前位置: 首页 > 知识库问答 >
问题:

spring boot test spyBean注释未注入依赖项

匡安宜
2023-03-14

我有一个Spring启动应用程序,我最近从v1.3.3. RELEASE升级到v1.4.2. RELEASE。

用于我在v1中的集成测试。3.3,我有一个豆子,我能够成功地监视它。我在运行测试时,配置文件test,下面的passwordEncoder被激活,而不是应用程序的。

@Bean
@Profile({"test"})
PasswordEncoder passwordEncoder(){
    PasswordEncoder passwordEncoder = new     BCryptPasswordEncoder(ApplicationConstants.CRYPT_LOG_ROUNDS);
    final String pwdHash = "$$CONST_HASH$$";        
    PasswordEncoder peSpy = spy(passwordEncoder);
    Mockito.when(peSpy.encode("TEST_USER_CRED")).thenReturn(pwdHash);
    return peSpy;
}

我正在升级到v1。4.2.发布并希望使用spyBean注释模拟单个方法,而不依赖于概要文件。

我对我的测试方法做了以下改变,以尝试它-

@RunWith(SpringRunner.class)
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class,DirtiesContextTestExecutionListener.class,DbUnitTestExecutionListener.class })
@DbUnitConfiguration(dataSetLoader = ReplacementDataSetLoader.class)
@SpringBootTest(classes = Application.class,webEnvironment=WebEnvironment.RANDOM_PORT)
public class MockTests {

    @SpyBean
    PasswordEncoder passwordEncoder;

    private MockMvc mockMvc;

    @Before
    public void setup() throws Exception {
        this.mockMvc = webAppContextSetup(webApplicationContext)
                .apply(springSecurity())
                .build();
        final String pwdHash = "$$CONST_HASH$$";
        Mockito.when(peSpy.encode("TEST_USER_CRED")).thenReturn(pwdHash);
    }
}

然而,当我尝试上述方法时,我在Mockito获得了NPE。当语句。我还缺什么吗?

我尝试使用MockBean而不是SpyBean,但仍然没有变化。我还尝试将间谍语句移动到@test方法,而不是@之前,并且仍然具有相同的NPE。

共有1个答案

施同
2023-03-14

问题在于TestExecutionListeners注释。除了现有的监听器之外,还添加了MockitoTestExecutionListener,修复了mock/spy bean的注入。

 类似资料:
  • 在React中,想做依赖注入(Dependency Injection)其实相当简单。请看下面这个例子: // Title.jsx export default function Title(props) { return <h1>{ props.title }</h1>; } // Header.jsx import Title from './Title.jsx'; export defa

  • 依赖注入 Dependency Injection is a strong mechanism, which helps us easily manage dependencies of our classes. It is very popular pattern in strongly typed languages like C# and Java. 依赖注入是一个很强大的机制,该机制可以帮

  • 简介 Hyperf 默认采用 hyperf/di 作为框架的依赖注入管理容器,尽管从设计上我们允许您更换其它的依赖注入管理容器,但我们强烈不建议您更换该组件。 hyperf/di 是一个强大的用于管理类的依赖关系并完成自动注入的组件,与传统依赖注入容器的区别在于更符合长生命周期的应用使用、提供了 注解及注解注入 的支持、提供了无比强大的 AOP 面向切面编程 能力,这些能力及易用性作为 Hyper

  • 出自维基百科 Wikipedia: 依赖注入是一种允许我们从硬编码的依赖中解耦出来,从而在运行时或者编译时能够修改的软件设计模式。 这句解释让依赖注入的概念听起来比它实际要复杂很多。依赖注入通过构造注入,函数调用或者属性的设置来提供组件的依赖关系。就是这么简单。

  • 主要内容:什么是依赖注入,value,factory,provider,constant,实例,AngularJS 实例 - factory,AngularJS 实例 - provider什么是依赖注入 wiki 上的解释是:依赖注入(Dependency Injection,简称DI)是一种软件设计模式,在这种模式下,一个或更多的依赖(或服务)被注入(或者通过引用传递)到一个独立的对象(或客户端)中,然后成为了该客户端状态的一部分。 该模式分离了客户端依赖本身行为的创建,这使得程序设计变得松耦

  • 我要的不是意见而是事实 我正在尝试选择一个新的DI。我有一些Guice的经验。总的来说,我想说它的一个优点是,当从scala需要与Java集成时,Guice可以完成这项工作。所以对于互操作性来说,这是一个明显的优势。 如果我们抛开这个互操作性问题不谈,谁能给我简单的比较一下 scaladi,guice,Macwire? 我对了解烫伤症还是新手。我发现令人惊讶的一件事是必须通过隐式参数在喷油器周围移