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

如何在一个实现类中注入两个mockito对象

洪俊拔
2023-03-14

现在只有一个嘲笑工作正常。另一个返回空指针异常。@Autowired和@Mock都为BCryptPasswordEncoder密码编码器提供空点;

@SpringBootTest
public class UserServiceTests {
    
    @Autowired
    BCryptPasswordEncoder passwordEncoder;
    
    @Mock
    private UserRepository userRepository;
    
    @InjectMocks
    private UserService userService =new UserServiceImpl();
    
    @BeforeEach
    void setUp() throws Exception{
        MockitoAnnotations.initMocks(this);
    }
}

共有3个答案

宋成天
2023-03-14

这个为我工作


public class UserServiceTests {
    
    @InjectMocks
    private UserService userService = new UserServiceImpl();
    
    @Mock
    private UserRepository userRepository;
    
    @Mock
    BCryptPasswordEncoder passwordEncoder;
    
    @BeforeEach
    void setUp() throws Exception{
        MockitoAnnotations.initMocks(this);
    }
}
丁宏浚
2023-03-14

没有可以注入的< code > BCryptPasswordEncoder 的默认实例。所以你不能自动连线。您应该在配置中的某个地方或任何其他地方声明一个Bean。< br >示例:

java prettyprint-override">@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder() {
    return new BCryptPasswordEncoder();
}
宋子辰
2023-03-14

如果您想单元测试您的UserServiceImpl类,只需删除@SpringBootTest(它实际上是一个成熟的联调)。以下应该按预期工作:

@ExtendWith(MockitoExtension.class)
public class UserServiceTests {
    
    @Mock
    BCryptPasswordEncoder passwordEncoder;
    
    @Mock
    private UserRepository userRepository;
    
    @InjectMocks
    private UserServiceImpl userService;

    // Your tests
}
 类似资料:
  • 我正在尝试为以下类创建单元测试: 我当前的测试类是: 我可以模拟类的私有字段,但似乎找不到模拟静态方法的方法。这是可能的还是我只是在浪费时间? 我使用Mockito1.10.19和JUnit4进行测试。 我是一个新的对象嘲弄单元测试,所以如果我有什么大错特错,请告诉我! 多谢了。

  • 考虑拥有两个实体管理器工厂: 然后,我希望有两个Beans,并向其中注入正确的持久性上下文: 该bean看起来像: 这显然不起作用,因为EntityManager不是bean,不能以这种方式注入: 如何在bean中限定正确的EntityManager?我曾经使用< code>@PersistenceContext注释,但是这并不可用,因为我需要注入它。 如何为此类Bean指定持久性上下文? 更新:

  • 可以模拟抽象类,也可以使用Mockito注释将模拟类注入抽象类。我现在有以下情况: 我想在AbstractClassUnderTest上使用类似@InjectMocks的东西,但它不能与@Mock结合使用。Powermock的Whitebox的当前情况是有效的,但我很好奇是否可以通过注释来解决它。我找不到任何解决方案或示例。 (我知道对测试抽象类的反对意见,我个人更愿意测试一个具体的实现,只使用@

  • 所以我有一个帮助命令,它会向您发送DM上的命令列表。发送后,我希望它在同一个@bot或@client.command中发送另一个嵌入。 @客户。command()异步定义帮助(ctx,成员:discord.member=None):

  • 我有以下实现,我正在尝试在Guice中注入 这是我的注入代码Injector guice=Guice. Injector();guice.get实例(SomeClass.class); 但我不断地得到错误: 在hello.package.helloworld.客户端中找不到合适的构造函数。类必须有一个(并且只有一个)用@Inject注释的构造函数或一个非私有的零参数构造函数 如何注入一个已经有参数

  • 然后在'main'类中,我将'panel'添加到JFrame中。 我的问题是,我正在尝试实现一个actionListener到一个添加在'Panel'类内部的按钮。actionListener函数将添加更多按钮并使用G.DrawString的按钮。现在,我要将ActionListener放置在哪里,以便这样做呢?如何将g.drawString用于特定的面板,而g.drawString行位于另一个类