レガシー アプリケーションに 1500 個の spring.xml があるとします。サービスの単体テストを書きたいと思っています。私は依存地獄の奥深くにいます。アプリをそのまま受け入れるしかありません。
そのため、spring-3.something と mockito-1.9 を使用しており、サービスをテストする良い方法が必要です。新しいコードは @Autowired アノテーションを頻繁に使用します。
間接的に、このサービスは、実際にテストで使用したい ~25 のヘルパー (ファクトリ メソッドなど) と、このテストでは関心のない ~25 のオブジェクトを使用します。
現在、上記の方法でコンテキストをセットアップしようとしていますが、@Mock、@InjectMocks、@Autowired の効果について混乱しています。
私のテストを以下に示します。正しくセットアップするにはサポートが必要です。
質問:
- @InjectMocks の実際の効果は何ですか?
- どの自動配線された Bean が実際に使用され、どれがモックに置き換えられるかを (技術的に) どのように判断できますか?
- 私は知っています、偽物を得るためにモックを悪用しています。ワンライナーで偽物を入手する簡単な方法はありますか?
- *私はそのようなサービスをたくさん持っているので、これを理解したいことに注意してください... *
これが私のサンプルです:
@ContextConfiguration(locations = {
"classpath:/some/path/MainTestConfig.spring.xml"
})
@RunWith(SpringJUnit4ClassRunner.class)
public class SampleTest {
// *** Uninteresting Dependencies to be mocked *** //
@Mock Mock1 mock1;
@Mock Mock2 mock2;
/** Service under test */
@Autowired
SomeService service;
// *** Tightly coupled helpers to be used *** //
@Autowired Helper1 helper1
@Autowired Helper2 helpr2
@Before
public void setup() {
MockitoAnnotations.initMocks(SampleTest.class);
}
@Test
public void testSample() {
// prepare dummy context
SomeContext context = new Context();
// define expected result
int expectedValue = 42;
//execute method under test, record result
Result actualResult = service.execute(context);
//make assertions on result
assertTrue(actualResult.getSomething()==expectedValue);
}
}