2017-09-05 3 views
1

以下の例は正しく動作します。問題は私が@InjectMocks注釈が必要なことです。 SpringJUnit4ClassRunner.classMockitoJUnitRunner.classに置き換えると、すべてが壊れる(testValueの代わりにbar = null)。Spring統合テスト:MockitoJUnitRunnerを使用して@Valueを挿入します

修正方法?

//@RunWith(MockitoJUnitRunner.class) // not work (
@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = FooTest.Config.class) 
@TestPropertySource(properties = { 
     "some.bar.value=testValue", 
}) 
public class FooTest { 

    @Value("${some.bar.value}") 
    String bar; 

    @Test 
    public void testValueSetup() { 
     assertEquals("testValue", bar); 
    } 

    @Configuration 
    static class Config { 

     @Bean 
     public static PropertySourcesPlaceholderConfigurer propertiesResolver() { 
      return new PropertySourcesPlaceholderConfigurer(); 
     } 
    } 
} 

答えて

2

Mockitoも、それはMockitoJUnitRunnerを使用することはできません状況、例えば:

@Rule 
public MockitoRule mockito = org.mockito.junit.MockitoJUnit.rule(); 

を克服するためのルールを提供しています...または手動Mockitoを設定できます。

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

あなたはClassRuleのこのコンボのことができるようにとSpringRunnerはありません同じ機能を有効にするには、ルールする必要があります。

@ClassRule 
    public static final SpringClassRule SPRING_CLASS_RULE = new SpringClassRule(); 

    @Rule 
    public final SpringMethodRule springMethodRule = new SpringMethodRule(); 

通常のようにMockitoRunnerを使用してください。

さらに、依存関係をMockito.mockなどで直接模倣することもできますが、アノテーションのアプローチは少し面倒ですが、テストが単純ではない場合には面倒な実行時の問題につながる可能性があります。 @InjectMocksの場合

なぜあなたはSpringBootプロジェクト内でMockitoランナーが必要なのでしょうか? MockBeansを使用して、必要に応じてSpring Beansをモックできます。私はMockitoRunnerを使う必要がなかったので、XY問題のような匂いがする。

関連する問題