5

テスト用にモック化されたバージョンを含む Bean を@FeignClient作成するだけで、アノテーションを介して作成された Bean をオーバーライドすることは可能ですか?@Configuration

私はすでにそれを試しましたが、@FeignClientBean が最後に作成されたようです (またはそう思う)。私のテストでは、モックされたバージョンではなく、実際のバージョンが常に注入されます。@Component同じ構成ファイルで、実際の名前を使用するだけで同じようにモックされた(を除く) 注釈なしで作成された別の Bean があり、完全に機能します。

私は@MockBeanそれをモックするために使用しようとしましたが、それは機能しますが、プロジェクトにはいくつかの癖があり、別のSpringコンテキストを作成するとテストが中断されます。

ありがとう。

編集。@Configuration実際、テストをデバッグしたところ、Feign クライアントと同じ名前を使用すると、デバッガーがBean で停止してモック バージョンを作成することさえできないことに気付きました。名前を別の名前に変更しても機能しますが、同じタイプの別の Bean が新しい名前で作成されるだけです。ここで不足している構成はありますか?

EDIT 2.これはサンプルコードです。私が持っているこれを実行すると、それBarServiceはモックされたバージョンですFooServiceが、実際のものです。

@FeignClient(name = "fooService")
public interface FooService {
}

@Component
public class BarService {
}

@Configuration
public class ConfigClass {

  @Bean
  public FooService fooService() {
    return Mockito.mock(FooService.class);
  }

  @Bean
  public BarService barService() {
    return Mockito.mock(BarService.class);
  }

@RunWith(SpringRunner.class)
@ActiveProfiles("test")
@SpringBootTest
public class TestClass {

  @Autowired
  private FooService fooService;

  @Autowired
  private BarService barService;

  @Test
  public void test() {
    System.out.println(fooService.getClass());
  }
}
4

3 に答える 3