私は、JSFアプリケーションと、mockitoを使用しているモックに対していくつかのテストを実装しようとしています。 (私も春を使用)
@RunWith(MockitoJUnitRunner.class)
public class GeneralConfigServiceImplTest {
private GeneralConfigService generalConfigService;
@Mock
private GeneralConfigDAO generalConfigDAO;
@Mock
private GeneralConfig gen;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
generalConfigService = new GeneralConfigService();
ReflectionTestUtils.setField(generalConfigService, "generalConfigDAO", generalConfigDAO);
}
@Test
public void testAddGeneralConfigCallDAOSuccess() throws DAOException, EntityNullException, IllegalEntityArgumentException, ParseException, EntityPersistException {
gen = createGeneralConfigs("label", "value");
generalConfigService.setInstance(gen);
generalConfigService.persist();
log.info(generalConfigService.getInstance().toString());
}
}
テストは成功しますが、getInstance
メソッドでインスタンスを取得したい場合。以前にコンストラクターを介して設定したすべてのパラメーターはnullです。私はモックされたオブジェクトは初めてなので、この動作は正常ですか、それともコードに間違いがありますか?
本当にGeneralConfigService#getInstance()の実装に依存します。また、@InjectMocks
アノテーションを使用すると、テストコードを大幅に簡素化できます。
MockitoJUnitRunner
を使用する場合、モックを初期化して依存関係を手動で注入する必要はありません。
@RunWith(MockitoJUnitRunner.class)
public class GeneralConfigServiceImplTest {
@InjectMocks
private GeneralConfigService generalConfigService;
@Mock
private GeneralConfigDAO generalConfigDAO;
@Test
public void testAddGeneralConfigCallDAOSuccess() {
// generalConfigService is already instantiated and populated with dependencies here
...
}
}
使用することを忘れないでください
MockitoAnnotations.initMocks(this);
アノテーションを介してオブジェクトをモックしている場合、つまり@Mock Objectname
Mockito
mocksへのすべてのメソッド呼び出しは、デフォルトでnullを返します。何かを返すようにしたい場合は、when
ステートメントを介して返すように指示する必要があります。
次のように動作すると考えているようです... setInstance
を呼び出し、getInstance
がsetInstance
に渡された値を返すことを期待しています。 DAOは動作します。これがあなたがしようとしているものである場合、setInstance
はモックを返すように設定したものを返し、リレーションを持たないので、getInstance
を呼び出してgetInstance
をテストしないでください。 setInstance
に渡されたものに。代わりに、verify
を使用して、DAO
の適切なメソッドがsetInstance
メソッドから呼び出されたことを検証します。
たとえば、GeneralConfigService.setInstance
がGeneralConfigDAO.setInstance
を呼び出す場合、テストは次のようになります。
@Test
public void testAddGeneralConfigCallDAOSuccess() throws DAOException, EntityNullException, IllegalEntityArgumentException, ParseException, EntityPersistException {
gen = createGeneralConfigs("label", "value");
generalConfigService.setInstance(gen);
generalConfigService.persist();
verify(genConfigDAO).setInstance(sameInstance(gen));
}
また、gen
が(@Mock
を介して)モックである場合、なぜgen = createGeneralConfigs...
を介して他の何かに割り当てるのですか?