1. ホーム
  2. java

春のJUnit。autowiredコンポーネントでモックする方法

2023-09-10 21:06:10

質問

テストしたいSpringコンポーネントがあり、このコンポーネントにはautowired属性があり、ユニットテストの目的のために変更する必要があります。問題は、クラスがポスト構築メソッド内でautowiredコンポーネントを使用しているため、実際に使用される前にそれを置き換える(すなわち、ReflectionTestUtilsを介して)ことができないことです。

どのようにすればよいのでしょうか?

これが私がテストしたいクラスです。

@Component
public final class TestedClass{

    @Autowired
    private Resource resource;

    @PostConstruct
    private void init(){
        //I need this to return different result
        resource.getSomething();
    }
}

そして、これがテストケースのベースとなるものです。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= "classpath:applicationContext.xml")
public class TestedClassTest{

    @Autowired
    private TestedClass instance;

    @Before
    private void setUp(){
        //this doesn't work because it's executed after the bean is instantiated
        ReflectionTestUtils.setField(instance, "resource", new Resource("something"));
    }
}

postconstructメソッドが呼び出される前に、リソースを他のものに置き換える方法はありますか?Spring JUnitランナーに別のインスタンスを自動配線するように指示するような?

どのように解決するのですか?

新しい testContext.xml を用意し、その中で @Autowired ビーンを定義していますが、これはテストに必要な型です。