मैं Spring Boot
रेस्ट कंट्रोलर का परीक्षण करना चाहता हूं, जिसे Spring security
का उपयोग करके सुरक्षित किया गया है, और इसके अंदर मैक्स का उपयोग करें। मैंने मॉकिटो के साथ कोशिश की है, लेकिन मुझे लगता है कि किसी भी मॉकिंग टूल को चाल चलनी चाहिए।स्प्रिंग मॉकएमवीसी, स्प्रिंग सुरक्षा और मॉकिटो
मेरी परीक्षणों में वसंत सुरक्षा को सक्षम करने के मैं पहली बार इस प्रकार किया:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Main.class)
@TestPropertySource(value="classpath:application-test.properties")
@WebAppConfiguration
@ContextConfiguration
public class MyTest{
protected MockMvc mockMvc;
@Autowired
private WebApplicationContext wac;
@Before
public void setUp(){
mockMvc = MockMvcBuilders
.webAppContextSetup(wac)
.apply(SecurityMockMvcConfigurers.springSecurity())
.build();
}
@Test
public void doTheTest(){
mockMvc.perform(post("/user/register")
.with(SecurityMockMvcRequestPostProcessors.csrf())
.content(someContent()));
}
}
वहाँ तक, यह अच्छी तरह से काम करता है।
इस चरण के बाद, मैं अलगाव में अपने सुरक्षित नियंत्रक का परीक्षण करने के लिए मैक्स जोड़ना चाहता था।
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Main.class)
@TestPropertySource(value="classpath:application-test.properties")
@WebAppConfiguration
@ContextConfiguration
public class MyTest{
protected MockMvc mockMvc;
@Mock
private Myservice serviceInjectedInController;
@InjectMocks
private MyController myController;
@Autowired
private WebApplicationContext wac;
@Before
public void setUp(){
mockMvc = MockMvcBuilders
.webAppContextSetup(wac)
.apply(SecurityMockMvcConfigurers.springSecurity())
.build();
}
@Test
public void doTheTest(){
mockMvc.perform(post("/user/register")
.with(SecurityMockMvcRequestPostProcessors.csrf())
.content(someContent()));
}
}
दुर्भाग्य से, मज़ाक उड़ाया सेवा, नियंत्रक में इंजेक्ट किया जाता है नहीं के रूप में वहाँ MockMVC और Mocks संबंधित कुछ भी नहीं है, इसलिए mocks नियंत्रक में इंजेक्शन नहीं कर रहे हैं।
तो मैं MockMVC का विन्यास बदलने की कोशिश की, इस प्रकार है:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Main.class)
@TestPropertySource(value="classpath:application-test.properties")
@WebAppConfiguration
@ContextConfiguration
public class MyTest{
protected MockMvc mockMvc;
@Mock
private Myservice serviceInjectedInController;
@InjectMocks
private MyController myController;
@Before
public void setUp(){
mockMvc = MockMvcBuilders
.standAloneSetup(myController)
.apply(SecurityMockMvcConfigurers.springSecurity())
.build();
}
@Test
public void doTheTest(){
mockMvc.perform(post("/user/register")
.with(SecurityMockMvcRequestPostProcessors.csrf())
.content(someContent()));
}
}
लेकिन इस मामले में, मैं कोई अन्य समस्या है। स्प्रिंग सुरक्षा विन्यास के बारे में शिकायत की है:
java.lang.IllegalStateException: springSecurityFilterChain cannot be null. Ensure a Bean with the name springSecurityFilterChain implementing Filter is present or inject the Filter to be used.
मैं कोई अन्य विचार सुरक्षा और मजाक बनाने के लिए किया है। कोई उपाय? या मुझे एक और तरीका करना चाहिए?
धन्यवाद।
आप स्प्रिंग सुरक्षा का उपयोग कर रहे 4 संस्करण: स्पष्ट का उपयोग कर springSecurityFilterChain प्रदान कर सकते हैं? – Ritesh
मैं स्प्रिंग-बूट 1.2.7.RELEASE का उपयोग कर रहा हूं और मैंने 4.0.2 –
@Remi का उपयोग करने के लिए डिफ़ॉल्ट स्प्रिंग सुरक्षा को ओवरराइड किया है क्या आपने कभी इसे हल किया है? – hvgotcodes