如何在Spring配置中注入模拟bean以创建另一个bean?
如何在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等。我没有得到模拟的值。有什么办法吗?
问题出现的原因是需要在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了。