के माध्यम से निष्पादित नहीं की जा रही है, मैं स्टंप हो गया हूं। मैं एक AspectJ कक्षा का परीक्षण करने की कोशिश कर रहा हूँ। जब मैं अपना आवेदन चला रहा हूं तो माई आस्पेक्ट क्लास पूरी तरह से उठाया जाता है। हालांकि, मुझे लगता है कि किसी भी पहलू वर्ग को किसी भी विधि में किसी भी विधि को रोकने के लिए असमर्थ होना प्रतीत होता है।AspectJ सलाह यूनिट परीक्षण
मैं वसंत 3.2.2, AspectJ 1.7.2 और Maven 4.
यहाँ उपयोग कर रहा हूँ साधारण परीक्षण के साथ मैं काम कर रहा हूँ है:
टेस्ट AspectJ वर्ग
package my.package.path.config;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Aspect
public class TestAOP {
private String message;
public TestAOP() {
}
@Pointcut("execution(* my.package.path.TestAOPClient.relayMessage(..))")
public void aopPointcut() {
}
@Around("aopPointcut()")
public String monitor(ProceedingJoinPoint pjp) throws Throwable {
String msg = (String)pjp.proceed();
this.setMessage(msg);
return msg;
}
}
वर्ग जिसका विधि पकड़ा जा रहा है
package my.package.path.config;
public class TestAOPClient {
public String relayMessage(String msg) {
return msg;
}
}
टेस्ट कक्षा
package my.package.path.config;
import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertThat;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
@Configuration
@ContextConfiguration(classes={WebConfig.class})
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration("src/main/java")
public class AopConfigTest extends AbstractJUnit4SpringContextTests {
@Bean
public TestAOP testAop() throws Exception {
return new TestAOP();
}
@Test
public void assertTestConfigIsActive() {
TestAOPClient client = new TestAOPClient();
client.relayMessage("hello");
assertThat(((TestAOP)applicationContext.getBean("testAop")).getMessage(), equalTo("hello"));
}
}
WebConfig फ़ाइल
package my.package.path.web.context;
@Configuration
@EnableWebMvc
@EnableAspectJAutoProxy(proxyTargetClass=false)
@ComponentScan(value={"my.package.path.config", "my.package.path.web"})
public class WebConfig {
}
हमेशा, मैं, अभिकथन त्रुटि
Expected: "hello" but: was null
मेरे WebApplicationContext, उठाया जाना कार्यावधि में के बाद से लगता है मिल जाएगा अगर मैं एक वर्ग निर्दिष्ट करता हूं जो मेरे आस्पेक्ट पॉइंटकट के लिए मौजूद नहीं है, तो मुझे एक त्रुटि कॉन्टेक्स्ट त्रुटि लोड करने में विफल रहेगा।
मुझे क्या याद आ रही है?
मैंने आपके सुझावों के अनुसार चीजों को स्थानांतरित कर दिया।यह क्लीनर दिखता है। लेकिन यह अभी भी काम नहीं करता है। अभी, मेरे पास कोड के स्रोत/मुख्य/जावा क्षेत्र में मेरी परीक्षा कक्षाएं हैं, जबकि टेस्ट क्लास स्वयं src/test/java में है। WebConfig में TestAOP एनोटेट किया गया है। परीक्षण चलने पर यह कब और कैसे बुनाई से संबंधित हो सकता है? क्या ऐसा कोई विन्यास है जिसे मुझे कहीं ऐसा करने के लिए सेट करने की आवश्यकता है? मैं वसंत के लिए बहुत नया हूँ। – Emilie
हे, बस पाया है कि आप 'TestAOPClient ग्राहक = नए TestAOPClient() की परीक्षा में मैन्युअल रूप से लक्ष्य सेम पैदा कर रहे;' ... यह इस तरह से काम नहीं करता। वसंत वह होना चाहिए जो बीन बना रहा हो! मैं अपना जवाब अपडेट करूंगा। –
उत्तर अद्यतन किया गया। –