統合テストへのサービスコンポーネントの注入
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、こちらまでご連絡ください。
Liferay DXPの @Inject
アノテーションを使用して、 @Reference
アノテーションを使用してサービスコンポーネント をOSGiコンポーネントに挿入するように、統合テストにサービスコンポーネントを挿入できます。
@Inject
は、リフレクションを使用して、フィールドのインターフェイスに一致するサービスコンポーネントオブジェクトをフィールドに注入します。 テストルール LiferayIntegrationTestRule
は注釈を提供します。 注釈は、 フィルター
および タイプ
パラメーターを受け入れます。これらのパラメーターは、個別にまたは一緒に使用できます。
特定の実装またはサブクラスオブジェクトでフィールドを埋めるには、 タイプ
を設定します。
@Inject(type = SubClass.class)
SubClass
を、注入するサービスインターフェイスの名前に置き換えます。
DDLServiceUpgrade
オブジェクトを UpgradeStepRegistrator
インターフェイスフィールドに挿入するテストクラスの例を次に示します。
public class Test {
@ClassRule
@Rule
public static final AggregateTestRule aggregateTestRule =
new LiferayIntegrationTestRule();
@Test
public void testSomething() {
// your test code here
}
@Inject(
filter = "(&(objectClass=com.liferay.dynamic.data.lists.internal.upgrade.DDLServiceUpgrade))"
)
private static UpgradeStepRegistrator _upgradeStepRegistrator;
}
サービスコンポーネントをテストクラスに注入する方法は次のとおりです。
-
テストクラスで、 タイプ
ルールフィールドcom.liferay.portal.test.rule.LiferayIntegrationTestRule
追加します。 例えば、@ClassRule @Rule public static final AggregateTestRule aggregateTestRule = new LiferayIntegrationTestRule();
-
サービスコンポーネントを保持するフィールドを追加します。 フィールドを静的にすると、コンテナがテストの実行前に静的フィールドを1回挿入し、すべてのテストの実行後にそれらを無効にするため、効率が向上します。 非静的フィールドは各テストの実行前に挿入されますが、すべてのテストが終了するまでメモリに残ります。
-
フィールドに
@Inject
注釈を付けます。 デフォルトでは、コンテナはフィールドのタイプに一致するサービスコンポーネントオブジェクトをフィールドに注入します。 -
オプションで、
フィルター
文字列またはタイプ
パラメーターを追加して、注入するサービスコンポーネントオブジェクトをさらに指定します。
実行時に、 @Inject
アノテーションは、一致するサービスコンポーネントが利用可能になるまでテストをブロックします。 ブロックにはタイムアウトがあり、テストで使用できない依存関係に関するメッセージが記録されます。
すばらしいです\! これで、テストにサービスコンポーネントを注入できます。