WCMUsePOJOを継承する次のクラスのユニットテストケースを記述しています。今、このクラスは、以下に示すgetSlingScriptHelperメソッドを使用しています。ユニットテストWCMUsePOJOクラス
public class ConstantsServiceProvider extends WCMUsePojo {
private static final Logger logger = LoggerFactory.getLogger(ConstantsServiceProvider.class);
private String var1;
@Override
public void activate() throws Exception {
ConstantsService constantsService = getSlingScriptHelper().getService(ConstantsService.class);
if(constantsService != null) {
var1 = constantsService.getVar1();
}
}
public string getVar1() { return var1; }
}
質問はどうやってgetSlingScriptHelperメソッドを模倣するのですか?以下は私のユニットテストコードです。
パブリッククラスConstantsServiceProviderTest {
@Rule
public final SlingContext context = new SlingContext(ResourceResolverType.JCR_MOCK);
@Mock
public SlingScriptHelper scriptHelper;
public ConstantsServiceProviderTest() throws Exception {
}
@Before
public void setUp() throws Exception {
ConstantsService service = new ConstantsService();
scriptHelper = context.slingScriptHelper();
provider = new ConstantsServiceProvider();
provider.activate();
}
@Test
public void testGetvar1() throws Exception {
String testvar1 = "";
String var1 = provider.getVar1();
assertEquals(testvar1, var1);
}
}
ありがとうございました。私はslingscripthelperを働かせることができました。私の方法はあなたの解決策に非常によく似ています。私はBindingsクラスも模擬しなければならなかった。 '//スリングスクリプトのバインディングを設定します。 ' Bindings bindings = mock(Bindings.class); ' 'when(bindings.get(" sling "))thenReturn(context.slingScriptHelper());' これを追加してください'provider.init(bindings)'メソッドを呼び出します。 ** init()**の内部で呼び出されるので、これは最終的にactivateメソッドを実行します。 – romie99
これが正しいと感じる場合は、ソリューションに追加することができます。私はあなたの答えを正しいものとしてマークします。 :) – romie99
はい、あなたの実際のプロジェクトでは、正しいバージョンが必要です。ここでStackoverflow上の目的は、主なアイデアを提供するために、著者のブロックを解除するためにいくつかの詳細が見逃されることがあります。あなたの場合、 'init()'と 'Binding'についてはわかりませんでした。元の投稿では見つからなかったので、あなたの質問と一貫性を持たせるためにそのまま残しておきます。 –