如何在Spring配置中注入模拟bean以创建另一个bean?

13 浏览
0 Comments

如何在Spring配置中注入模拟bean以创建另一个bean?

我在单元测试中遇到了问题。以下是示例代码片段。我模拟了一个bean并将其注入到@Configuration类中,并使用模拟的属性创建另一个bean。

在下面的代码中,如果我进行检查,b.getSomething()会返回默认值,如""表示字符串,0表示int等。我没有得到模拟的值。有什么办法吗?

@Configuration
class A{
  @Autowired B b;
  @Bean
  public SomeClass someBean(){
   SomeClass clas = new SomeClass();
   clas.setSomething(b.getSomething());
   return clas;
   }
 }
 @ContextConfiguration(classes = { A.class}, loader = SpringockitoAnnotatedContextLoader.class)
class ATest{
@ReplaceWithMock
@Autowired
B b;
@Before
public void setup(){
Mockito.when(b.getSomething()).thenReturn("ABC");
}
}

我在单元测试中遇到了问题。以下是示例代码片段。我模拟了一个bean并将其注入到@Configuration类中,并使用模拟的属性创建另一个bean。

在下面的代码中,如果我进行检查,b.getSomething()会返回默认值,如""表示字符串,0表示int等。我没有得到模拟的值。有什么办法吗?

0
0 Comments

问题出现的原因是需要在Spring配置中注入一个mock bean来创建另一个bean。解决方法是创建一个返回mock对象的bean,并在需要的地方进行自动装配。

以下是解决该问题的步骤:

1. 首先,创建一个返回mock对象的bean。在这个例子中,创建了一个名为`myClassMock`的bean,并在`getMyClassMock()`方法中使用Mockito框架创建了一个`MyClass`的mock对象,并设置了mock对象的行为。

MyClass myClassMock;
public MyClass getMyClassMock(){
    MyClass mock = Mockito.mock(MyClass.class);
    Mockito.when(mock.getSomething()).thenReturn("ABC");
    return mock;
}

2. 然后,在需要使用mock对象的地方进行自动装配。可以使用`@Autowired`注解将`myClassMock`bean注入到需要使用的地方。

@Autowired
private MyClass myClassMock;

通过上述步骤,可以在Spring配置中注入一个mock bean,并使用它来创建另一个bean。这样,就可以在测试或者其他需要使用mock对象的场景中使用这个mock bean了。

0