我正在爲擴展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類。 (綁定.get(「sling」));然後返回(context.slingScriptHelper());' ''添加這個然後調用'provider.init(bindings)'方法。這將最終運行activate方法,因爲它已經在** init()**中被調用了。 – romie99
如果您覺得這是正確的,可以將其添加到您的解決方案中。我會將你的答案標記爲正確答案。 :) – romie99
是的,在你的真實項目你應該有正確的版本。在Stackoverflow上,一些細節可能會被忽略,因爲目標是提供主要思想來解鎖作者。在你的情況下,我不知道'init()'和'Binding',因爲它在原來的文章中錯過了,所以我建議保留所有'原樣'以符合你的問題。 –