@RefreshScopeはMockitoのモックを無視しているようです

アミンアブ-タレブ

SpringBootおよびSpringCloudConfigサービスを使用して構成値を提供するサービスを実装しています。私のサービスには、リモートGitリポジトリで値が変更されたときに更新する必要があるいくつかの構成値があり@RefreshScope、その機能を有効にするために使用していました。

RestTemplateそのサービスにモックを挿入しようとすると問題が発生します。モックを無視して、代わりに自動配線されたインスタンスを使用しているように見えます。注釈をコメントアウトすると、正常に機能しているようです。

サービスのコードは次のとおりです。

@Service
@RefreshScope
public class MyServiceImpl implements MyService {

    private static final Logger LOG = Logger.getLogger(MyServiceImpl.class);

    @Autowired
    public RestTemplate restTemplate;

    @Value("${opts.default}")
    private String default;

    @Value("${opts.address}")
    private String address;

    @Value("${opts.separator}")
    private String separator;

    ...


  }

テストソースコード:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
public class ServiceTest {

    @Mock
    private RestTemplate restTemplate;

    @Autowired
    @InjectMocks
    private MyServiceImpl service;

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

    public void testMethod() throws Exception {
        when(restTemplate.postForObject(anyString(), any(), eq(ServiceResponse.class), anyMap())).thenReturn(getSuccessfulResponse());

        ServiceResponse response = service.doYourStuff();

        Assert.assertNotNull(response);
        Assert.assertTrue(response.isSuccessful());
    }

    ...
  }
マーカスその後

@RefreshScopeBeanを追加すると、実際の生の実装ではなくプロキシになります。現在、RestTemplateは基になるインスタンスではなくプロキシに設定されています。(デバッグすると、MyServiceImpl実際にはのインスタンスに似ていることがわかりますMyServiceImpl$SpringCgLib#353234)。

修正するには、ReflectionTestUtilsを使用て依存関係を手動で設定する必要がありAopTestUtilsます。後者は、実際のプロキシを取得することです。

モックの初期化後に@InjectMocksアノテーションを削除し、setupメソッドに以下を追加します

Object actualTarget = AopTestUtils.getUltimateTargetObject(service);
ReflectionTestUtils.setfield(actualTarget, "restTemplate", restTemplate);

4.2より前のバージョンの場合、次の方法でうまくいく可能性があります

Object actualTarget = (service instanceof Advised) ? ((Advised) service).getTargetSource().getTarget() : service;

問題は、Mockitoがプロキシを検出せず、フィールドを設定するだけであるということです。ReflectionTestUtilsプロキシのいずれかので、手動アンラップを検出しません。私は実際に数回前にこのトラップに足を踏み入れたので、今朝SPR-14050を作成してReflectionTestUtils、痛みを少し和らげるためにそれを埋め込むことにしました

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Javaは私のtoStringメソッドを無視しているようです

分類Dev

AndroidはonActivityResultのsetResult呼び出しを無視しているようです

分類Dev

DateTime.Parseは文化を無視しているようです

分類Dev

numpy.genfromtxtはdtypeを無視しているようです

分類Dev

「Nugetパック」はBasePathパラメータを無視しているようです

分類Dev

DotNetCLI @ 2パックは構成入力を無視しているようです

分類Dev

WordPressのdo_actionフックは、保存されていないカスタマイザーの変更を無視しているようですか?

分類Dev

Webpackは私のtypescriptローダーを無視しているようです

分類Dev

MypyはTypeVarタイプの境界を無視しているようです

分類Dev

Makeは私のCFLAGSとLDFLAGSを無視しているようです

分類Dev

魚の殻はLD_LIBRARY_PATHを無視しているようですか?

分類Dev

SqlcommandANDは最初のパラメータを無視しているようです

分類Dev

郵便配達員は、事前リクエストで私のPOSTを無視しているようです

分類Dev

ScalaでMockitoを使用してVoidの戻り値の型をモックするにはどうすればよいですか?

分類Dev

mockito / powermockを使用してGoogleのジオコーディングAPIリクエストをモックするにはどうすればよいですか?

分類Dev

PowerMockとMockitoを使用して列挙型クラスのインスタンスをモックするにはどうすればよいですか?

分類Dev

Mavenはwebappのソースとターゲットを無視しているようです

分類Dev

Mockitoは:どのようにする方法を確認するために、他のメソッドへの呼び出しを無視して、正確なパラメータで一度だけ呼ばれていましたか?

分類Dev

Makefileはフラグを無視しているようです。どうして?

分類Dev

Makefileはフラグを無視しているようです。どうして?

分類Dev

MockitoでKotlinのキューをモックするのはうまくいかないようです

分類Dev

System.IO.AbstractionsのFileSystemWatcherを使用してモックファイルシステムを監視するにはどうすればよいですか?

分類Dev

C#でWebclientを使用しているときにSSLチェックを無視するにはどうすればよいですか?

分類Dev

NULL値を無視して、真の値のみを出力するにはどうすればよいですか?

分類Dev

MockitoとJUintで複雑なリクエストを使用してサービスをモックするにはどうすればよいですか?

分類Dev

継承を無視して、クラスが特定のタイプであるかどうかを確認するにはどうすればよいですか?

分類Dev

配列のモードを計算してデータを無視するにはどうすればよいですか?

分類Dev

配列のモードを計算してデータを無視するにはどうすればよいですか?

分類Dev

Ruby on Railsでペーパークリップを使用してモデルに無制限の画像を作成するにはどうすればよいですか?

Related 関連記事

  1. 1

    Javaは私のtoStringメソッドを無視しているようです

  2. 2

    AndroidはonActivityResultのsetResult呼び出しを無視しているようです

  3. 3

    DateTime.Parseは文化を無視しているようです

  4. 4

    numpy.genfromtxtはdtypeを無視しているようです

  5. 5

    「Nugetパック」はBasePathパラメータを無視しているようです

  6. 6

    DotNetCLI @ 2パックは構成入力を無視しているようです

  7. 7

    WordPressのdo_actionフックは、保存されていないカスタマイザーの変更を無視しているようですか?

  8. 8

    Webpackは私のtypescriptローダーを無視しているようです

  9. 9

    MypyはTypeVarタイプの境界を無視しているようです

  10. 10

    Makeは私のCFLAGSとLDFLAGSを無視しているようです

  11. 11

    魚の殻はLD_LIBRARY_PATHを無視しているようですか?

  12. 12

    SqlcommandANDは最初のパラメータを無視しているようです

  13. 13

    郵便配達員は、事前リクエストで私のPOSTを無視しているようです

  14. 14

    ScalaでMockitoを使用してVoidの戻り値の型をモックするにはどうすればよいですか?

  15. 15

    mockito / powermockを使用してGoogleのジオコーディングAPIリクエストをモックするにはどうすればよいですか?

  16. 16

    PowerMockとMockitoを使用して列挙型クラスのインスタンスをモックするにはどうすればよいですか?

  17. 17

    Mavenはwebappのソースとターゲットを無視しているようです

  18. 18

    Mockitoは:どのようにする方法を確認するために、他のメソッドへの呼び出しを無視して、正確なパラメータで一度だけ呼ばれていましたか?

  19. 19

    Makefileはフラグを無視しているようです。どうして?

  20. 20

    Makefileはフラグを無視しているようです。どうして?

  21. 21

    MockitoでKotlinのキューをモックするのはうまくいかないようです

  22. 22

    System.IO.AbstractionsのFileSystemWatcherを使用してモックファイルシステムを監視するにはどうすればよいですか?

  23. 23

    C#でWebclientを使用しているときにSSLチェックを無視するにはどうすればよいですか?

  24. 24

    NULL値を無視して、真の値のみを出力するにはどうすればよいですか?

  25. 25

    MockitoとJUintで複雑なリクエストを使用してサービスをモックするにはどうすればよいですか?

  26. 26

    継承を無視して、クラスが特定のタイプであるかどうかを確認するにはどうすればよいですか?

  27. 27

    配列のモードを計算してデータを無視するにはどうすればよいですか?

  28. 28

    配列のモードを計算してデータを無視するにはどうすればよいですか?

  29. 29

    Ruby on Railsでペーパークリップを使用してモデルに無制限の画像を作成するにはどうすればよいですか?

ホットタグ

アーカイブ