私は自動配線で3つの異なるクラスを使用しているクラスAを持っています
public class A () {
@Autowired
private B b;
@Autowired
private C c;
@Autowired
private D d;
}
それらをテストしている間、私はモックとして2つのクラス(BとC)のみを持ち、通常の実行としてクラスDを自動配線したいのですが、このコードは私のために機能していません:
@RunWith(MockitoJUnitRunner.class)
public class aTest () {
@InjectMocks
private A a;
@Mock
private B b;
@Mock
private C c;
@Autowired
private D d;
}
そうすることさえ可能ですか?
それは次のようなものでなければなりません
@RunWith(SpringJUnit4ClassRunner.class)
public class aTest () {
@Mock
private B b;
@Mock
private C c;
@Autowired
@InjectMocks
private A a;
}
D
をAutowired
にしたい場合は、Test
クラスで何もする必要はありません。 Autowired
A
には、D
の正しいインスタンスが必要です。また、Autowiring
が正しく設定されている場合、contextConfiguration
が機能するにはSpringJUnit4ClassRunner
を使用する必要があると思います。 MockitoJunitRunner
を使用していないため、mocks
を自分で初期化する必要があります。
MockitoAnnotations.initMocks(Java.lang.Object testClass)
私は同じ問題に直面していて、サジャン・チャンドランによる答えを試みました。私の場合、@ SpringBootTestアノテーションを使用してすべてのBeanのサブセットのみをロードするため、機能しませんでした。目標は、他の多くの依存関係と構成があるため、私がモックしているBeanをロードすることではありません。
そして、私は解決策の次のバリアントが私のために働くことを発見しました。これは通常の場合にも使用できます。
@RunWith(SpringRunner.class)
@SpringBootTest(classes={...classesRequired...})
public class aTest () {
@Mock
private B b;
@Mock
private C c;
@Autowired
@Spy
private D d;
@InjectMocks
private A a;
@Before
public void init(){
MockitoAnnotations.initMocks(this);
}
}