私は仕事のプロジェクトでは、我々は次のようにユニットテストのためのサービスを初期化されています:
- サービスのために必要とされるモックの依存関係。
- コンストラクタを使用してサービスを作成します。
このようなもの :
@RunWith(SpringRunner.class)
public class ServiceTest extends AbstractUnitTest {
@Mock private Repository repository;
private Service service;
@Before
public void init() {
service = new Service(repository);
when(repository.findById(any(Long.class))).thenReturn(Optional.of(new Entity()));
}
}
しかし、私たちの新しい開発者が使用することを提案@Autowired
し、@SpringBootTest
@SpringBootTest(classes = ServiceTest.class)
@MockBean(classes = Repository.class)
@RunWith(SpringRunner.class)
public class ServiceTest extends AbstractUnitTest {
@MockBean private Repository repository;
@Autowired private Service service;
@Before
public void init() {
when(repository.findById(any(Long.class))).thenReturn(Optional.of(new Entity()));
}
}
その前に、私はと推測@Autowired
し、@SpringBootTest
統合テストにのみ使用してください。しかし、多くのことをGoogleで検索し、私は何人かの人々は、ユニットテストでは、これらの2を使用することを参照してください。私は読んブート機能テストを。また、私は、この読み取り春との統合テストVSユニットテストを。私にとって、それはまだdoesnの`t私たちはユニットテストを行うには自分自身でこれを行うことができますよう、ユニットテストのための依存性注入を行うには春が関与する必要があるとも感じています。だから、必要がある@Autowired
と@SpringBootTest
ユニットテストで使用できますか?
号ユニットテストは、単独で単一のコンポーネントをテストすることです。あなたの豆でコンストラクタ・インジェクションを使用すると、あなたは非常に簡単に呼び出すことができますnew SomeService(myMock)
、何の春は必要ありません。
書き込みコンポーネントまたは機能(アプリケーションのテストが、完全な統合テストのために外部サービスにそれを配線していない、唯一の外部インタフェースをからかう;これはMockMvcテストのようなもののために良いです)テストすることのために良い試合で@SpringBootTest
、その場合にはあなたが必要があるかもしれませんSpring構成でモックオブジェクトを作成し、それらを操作することができますので、あなたのテストにそれらをautowireします。