स्ट्रट्स संस्करण: 2.5.25 - REST प्लगइन का उपयोग करना Junit 4.12

मैं स्ट्रेट्स क्रियाओं का परीक्षण शुरू करने के लिए यूनिट परीक्षण ढांचे को स्थापित करने की कोशिश कर रहा हूं और चलाने के लिए बुनियादी परीक्षण प्राप्त करने में समस्याएं आ रही हैं। यह वर्तमान में शिकायत कर रहा है कि यह मूल पैकेज "जिंजावा" नहीं ढूंढ सकता है (यह एक कस्टम स्ट्रैट्स प्लगइन है जो यूनिट टेस्ट के बाहर ठीक बनाता है और चलता है)

क्या स्ट्रट्स प्लगइन्स को लोड करने के लिए स्ट्रट्स कॉन्फ़िगरेशन के लिए कुछ भी कॉन्फ़िगर करने की आवश्यकता है? नीचे मेरा वर्तमान सेटअप है, साथ ही परीक्षण चलाने पर मुझे जो त्रुटि दिखाई दे रही है।

स्टैक ट्रेस:

com.opensymphony.xwork2.config.ConfigurationException: Unable to load configuration.
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:69)
    at org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:970)
    at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:463)
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:496)
    at org.apache.struts2.util.StrutsTestCaseHelper.initDispatcher(StrutsTestCaseHelper.java:44)
    at org.apache.struts2.StrutsJUnit4TestCase.initDispatcher(StrutsJUnit4TestCase.java:256)
    at org.apache.struts2.StrutsJUnit4TestCase.setUp(StrutsJUnit4TestCase.java:245)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
    at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
Caused by: com.opensymphony.xwork2.config.ConfigurationException: Parent package is not defined: jinjava
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.buildPackageContext(XmlConfigurationProvider.java:689)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:539)
    at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:326)
    at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:108)
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:196)
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:66)
    ... 42 common frames omitted

यूनिट टेस्ट (स्प्रिंग बीन्स को एनोटेशन के माध्यम से कॉन्फ़िगर किया गया है, हम किसी भी एक्सएमएल का उपयोग नहीं कर रहे हैं)

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = LoginActionSpringConfig.class)
public class LoginActionTest extends IwsStrutsSpringTestCase<LoginAction> {

    @Test
    public void getActionMapping() {
        ActionMapping mapping = getActionMapping("/security/login");
        Assert.assertNotNull(mapping);
        Assert.assertEquals("/security", mapping.getNamespace());
        Assert.assertEquals("login", mapping.getName());
    }


}

नीचे IwsStrutsSpringTestCase सुपर क्लास है जो StrutsSpringJUnit4TestCase का विस्तार कर रही है। मैंने एक getConfigPath() प्रदान किया है जिसमें struts-plugin.xml डालने का प्रयास भी शामिल है।

public abstract class IwsStrutsSpringTestCase<T> extends StrutsSpringJUnit4TestCase<T> {

    @Override
    protected String getConfigPath() {
        return "struts.xml, struts-plugin.xml";
    }
}

नीचे jinjava प्लगइन से struts-plugin.xml है जिसके बारे में स्टैक ट्रेस में शिकायत की जा रही है

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>

    <constant name="struts.jinjava.basepath" value="WEB-INF/jinJava" />

    <package name="jinjava" extends="struts-default">
        <result-types>
            <result-type name="jinjava" class="com.hs.struts.result.JinJavaResult" />
        </result-types>
    </package>
</struts>

10/18/2020 अपडेट करें pom.xml मैं यह भी नोट करना चाहूंगा कि वेबएप निर्देशिका डिफ़ॉल्ट मावेन लेआउट का पालन नहीं कर रही है। वेब फ़ाइलें /web . के अंतर्गत संग्रहीत हैं

अपडेट 11/1/2020 अनुरोध के अनुसार मेरा LoginActionSpringConfig.class नीचे है

@Configuration
public class LoginActionSpringConfig {

    @Bean
    public IIwsAuthenticationService authenticationService() {
        return new IwsAuthenticationServiceTest();
    }

    @Bean
    public ISecurityLogDao securityLogDao() {
        return new SecurityLogDaoTest();
    }

    @Bean
    public IUsersDepartmentDao usersDepartmentDao() {
        return new UsersDepartmentDaoTest();
    }

    @Bean
    public IDepartmentDao departmentDao() {
        return new DepartmentDaoTest();
    }

    @Bean
    public IwsCookieInterface iwsCookie() {
        return new IwsCookieTest();
    }

}
2
Paul Zepernick 16 अक्टूबर 2020, 20:41

1 उत्तर

सबसे बढ़िया उत्तर

मुझे इस बारे में विशिष्ट उत्तर नहीं पता है कि उपरोक्त कॉन्फ़िगरेशन क्यों काम नहीं कर रहा था, लेकिन मुझे अपनी प्रारंभिक समस्या का सामना करना पड़ा। मैंने मूल रूप से इन FileNotFoundExceptions को देखने के कारण getConfigPath() को ओवरराइड करने का प्रयास किया

java.io.FileNotFoundException: class path resource [WEB-INF/content/audit/] cannot be resolved to URL because it does not exist

मैं स्ट्रैट्स-रेस्ट प्लगइन का उपयोग कर रहा हूं जो कन्वेंशन प्लगइन का उपयोग करता है जो इन त्रुटियों को फेंक रहा था। मैंने एक कदम पीछे लिया और getConfigPath() ओवरराइड को हटा दिया। कुछ अतिरिक्त शोध के बाद और एक SO पोस्ट मिला जिसमें ओवरराइडिंग का सुझाव दिया गया था struts.xml में डिफ़ॉल्ट struts.convention.result.path और इसे कन्वेंशन प्लगइन को संतुष्ट करने के लिए एक्शन क्लासेस के पैकेज पर इंगित करता है। हम अपने परिणामों के लिए इस तरह से कन्वेंशन प्लगइन का उपयोग नहीं कर रहे हैं, इसलिए यह केवल यूनिट परीक्षण के दौरान कन्वेंशन प्लगइन को संतुष्ट करने के लिए किया जा रहा है।

<constant name="struts.convention.result.path" value="/com/hs/iws/actions" />

मैं अब एक अलग समस्या का सामना कर रहा हूं, लेकिन एक नई पोस्ट शुरू करूंगा।

0
Paul Zepernick 1 नवम्बर 2020, 16:57