如何在SpringConfiguration中注入模拟bean来创建另一个bean。?

如何在SpringConfiguration中注入模拟bean来创建另一个bean。?,spring,mockito,springockito,Spring,Mockito,Springockito,我对单元测试有问题。下面是示例代码片段。我模拟了一个bean,并将其注入@configuration类,然后使用mocked属性创建另一个bean 在下面的示例中,如果我检查,b.getSomething()会返回默认值,如字符串为“”,int为0等。我不会得到模拟值。你知道怎么做吗 @Configuration class A{ @Autowired B b; @Bean public SomeClass someBean(){ SomeClass clas = new

我对单元测试有问题。下面是示例代码片段。我模拟了一个bean,并将其注入@configuration类,然后使用mocked属性创建另一个bean

在下面的示例中,如果我检查,b.getSomething()会返回默认值,如字符串为“”,int为0等。我不会得到模拟值。你知道怎么做吗

@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,并在需要的地方自动连接它

@Autowired
MyClass myClassMock;

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

在这种情况下,请始终扪心自问:在进行这种单元测试时,您真的需要Spring吗。例如,在您测试的示例中,您可以(而且您应该)显式实例化要测试的类并注入模拟,而不是依赖Spring来完成。如果您认为在单元测试中确实需要Spring,这个问题可能会让您了解(其中一种)实现方法:我认为这对我不适用。。你能试试我上面的例子吗?让我知道。使用@Profiles和你上面的代码,我想我已经做到了。