私はMockitoを使用していると私はテスト目的のために、私のREjercicioDAOクラスにモックCustomFileHandlerを注入しようとしています。事は私のテストは何の例外をスローしない、ですが、それは私のモックオブジェクトを注入していない、オリジナルの@Autowired CustomFileHandlerは置換されていません。ここに私のコードは次のとおりです。
@Repository
public class REjercicioDAO extends ARHibernateDAO < REjercicio > implements IREjercicioDAO {
@Autowired
public ICustomFileHandler customFileHandler;
...
}
そして、ここに私のテストです:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = ATest.CONTEXT_CONFIGURATION)
public class REjercicioDAOTest extends ATest {
@Mock private ICustomFileHandler customFileHandler;
@Autowired
@InjectMocks
private IREjercicioDAO rEjercicioDAO;
@Before
public void before () {
MockitoAnnotations.initMocks(this);
...
}
ところで、エンティティは仕事予想通りとインタフェースが正しく、実際のエンティティにリンクされている、私はそれをテストしています。私はこれをどのように修正することができますか?
ここでは無いの答えがあります。私はあなたが本当に明示的に依存関係を設定することで、クラスの読者のためにクリアすることを行うことができながら、これほど多くの人々が反射に頼って、この厄介なAPIを使用して見て本当に申し訳ありませんので、私はより多く与えることができませんでした。
事は、私のテストは何の例外をスローしない、ですが、それは私のモックオブジェクトを注入しません
驚かない。何の注入が成功しない場合でも、モック滞在を静かに注入するこの方法です。javadocツール(強調は私ではありません!):InjectMocks
Mockitoは順番にコンストラクタ・インジェクション、セッターインジェクション、またはプロパティ注射によっていずれか一方のみ注入モックにしようとすると、以下に説明するようにします。次の戦略のいずれかが失敗した場合、その後、Mockitoは失敗を報告しません。つまり、あなたは依存関係を自分で提供する必要があります。
Mockitoは失敗を報告しませんが、私は本当にこのAPIを使用することを阻止します。
あなたの実際の問題について、その見て:
@Autowired
@InjectMocks
private IREjercicioDAO rEjercicioDAO;
あなたは春とMockito注釈の両方でフィールドに注釈を付けます。あなたはそれらの処理の順序と快適感じますか?これらは、2つの異なるライブラリから来ます。私はそれが仕事(運とランダムは存在しない)んことを教えてくれませんが、あなたは本当にそれが堅牢であることだと思いますか?
:あなたの条件を達成するために次の2つの明確な段階で物事を行いそのようなこと書くことができ
、インスタンス化オブジェクト:依存関係をからかうと春の依存注入- -
:モックの依存関係の間、春の依存関係セットを
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = ATest.CONTEXT_CONFIGURATION)
public class REjercicioDAOTest extends ATest {
@Mock
private ICustomFileHandler customFileHandler;
@Autowired
private IREjercicioDAO rEjercicioDAO;
@Before
public void before () {
MockitoAnnotations.initMocks(this);
// Set explicitly the fileHandler dependency
rEjercicioDAO.setFileHandler(customFileHandler);
}
}