当前位置: 首页 > 面试题库 >

将Mockito模拟注入Spring Bean

鲜于凯歌
2023-03-14
问题内容

我想将Mockito模拟对象注入到Spring(3+)bean中,以进行JUnit的单元测试。我的bean依赖项当前是通过@Autowired在私有成员字段上使用注释来注入的。

我考虑过使用,ReflectionTestUtils.setField但是我希望注入的bean实例实际上是一个代理,因此没有声明目标类的私有成员字段。我不希望为依赖项创建一个公共的setter,因为我将纯粹出于测试目的而修改接口。

我遵循了Spring社区提供的一些建议,但是未创建该模拟程序,并且自动装配失败:

<bean id="dao" class="org.mockito.Mockito" factory-method="mock">
    <constructor-arg value="com.package.Dao" />
</bean>

我目前遇到的错误如下:

...
Caused by: org...NoSuchBeanDefinitionException:
    No matching bean of type [com.package.Dao] found for dependency:
    expected at least 1 bean which qualifies as autowire candidate for this dependency.
    Dependency annotations: {
        @org...Autowired(required=true),
        @org...Qualifier(value=dao)
    }
at org...DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(D...y.java:901)
at org...DefaultListableBeanFactory.doResolveDependency(D...y.java:770)

如果将constructor-arg值设置为无效值,则启动应用程序上下文时不会发生错误。


问题答案:
@InjectMocks
private MyTestObject testObject;

@Mock
private MyDependentObject mockedObject;

@Before
public void setup() {
        MockitoAnnotations.initMocks(this);
}

这会将所有模拟对象注入测试类。在这种情况下,它将嘲笑对象注入testObject中。上面已经提到了,但这是代码。



 类似资料:
  • 问题内容: 我有以下代码: 我想使用Mockito创建一个测试。我编写了如下测试: 我在网上收到NullPointerException: ,它表示“策略”列表已初始化,但为空。Mohito有什么办法可以像Spring一样浪费时间?是否将所有实现接口“策略”的实例自动添加到列表中? 顺便说一句,我在Wrapper类中没有任何二传手,如果可能的话,我想以这种方式离开。 问题答案: Mockito不知

  • 目前,我遇到了一些莫基托图书馆的麻烦...更确切地说,我无法将userRepository bean注入到我的模拟服务中。对于依赖注入,我使用的是spring boot。下面是一些代码示例: 在我的测试方法中,我想在用户得到更新之前跳过验证和令牌创建。 因此,当我调用updateUser方法时,问题出现在我的测试方法中,它失败了,因为我的userRepository没有注入(NullPointer

  • 问题内容: 我写了一个AngularJS服务,我想对其进行单元测试。 我的app.js文件已注册: 我可以测试DI是否像这样工作: 这证明了可以通过DI框架创建服务,但是接下来我要对服务进行单元测试,这意味着要模拟注入的对象。 我该怎么做呢? 我试过将我的模拟对象放在模块中,例如 并将服务定义重写为: 但是后者似乎停止了DI所创建的所有服务。 有人知道我可以如何为单元测试模拟注入的服务吗? 谢谢

  • 所以我有一个简单的java类: ClassA包含: B类: 我的测试设置如下所示: 问题是ClassB不是为ClassA注入的。 然后通过classA调用returnObject(ClassB),它返回NullPointerException(ClassB不是模拟/注入的)。 如果通过IWantToTestThisClass调用returObject(class B),则可以。 这是同时为两个类注

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

  • 我有一个带有的测试类,它用于初始化Mockito: 现在我有一个@autowired field来获得方面的建议,但不能注入模拟。