मेरे पास निम्न की तरह एक कॉन्फ़िगरेशन क्लास है:

@Configuration
public class Configuration {

  @Autowired
  private JdbcTemplate jdbcTemplate;

  @Bean
  SimpleJdbcCall simpleJdbcCall() {
    return new SimpleJdbcCall(jdbcTemplate).withProcedureName("");
  }

}

मैं इस विन्यास वर्ग के लिए एक इकाई परीक्षण लिखने की कोशिश कर रहा हूँ। मेरी टेस्ट क्लास निम्न की तरह दिखती है।

@ContextConfiguration(classes = { Configuration.class })
@RunWith(SpringRunner.class)
public class ConfigurationTest {

  ApplicationContextRunner context = new ApplicationContextRunner()
                                         .withUserConfiguration(Configuration.class);

  @Test
  public void should_check_presence_of_example_service() {
    context.run(it -> {
      assertThat(it).hasSingleBean(SimpleJdbcCall.class);
    });
  }
}

जब मैं ConfigurationTest कक्षा में परीक्षण चला रहा हूं, तो मुझे नीचे की तरह एक त्रुटि मिल रही है।

'कॉन्फ़िगरेशन' नाम से बीन बनाने में त्रुटि: फ़ील्ड 'jdbcTemplate' के माध्यम से व्यक्त असंतुष्ट निर्भरता; नेस्टेड अपवाद है org.springframework.beans.factory.NoSuchBeanDefinitionException: 'org.springframework.jdbc.core.JdbcTemplate' प्रकार का कोई योग्य बीन उपलब्ध नहीं है: कम से कम 1 बीन की उम्मीद है जो ऑटोवायर उम्मीदवार के रूप में योग्य है। निर्भरता एनोटेशन: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

मैंने कॉन्फ़िगरेशन क्लास और पास किए गए डेटासोर्स में एक बीन jdbcTemplate को क्रेट करके इसे हल करने का प्रयास किया। तब परीक्षण इकाई परीक्षण बीन डेटा स्रोत नहीं ढूंढता है। उसके बाद मैंने कॉन्फ़िगरेशनटेस्ट क्लास में @TestConfiguration का उपयोग किया और एक नकली (jdbcTemplate) क्रेट किया। यह भी काम नहीं आया।

0
Nahid Shah 17 नवम्बर 2020, 04:55

1 उत्तर

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

मुझे अपनी समस्या का समाधान मिल गया, और मैंने सोचा कि अगर कोई ऐसी ही स्थिति में है तो यह दूसरों के लिए मददगार हो सकता है। वास्तव में मेरा लक्ष्य कंपनी की आवश्यकता के कारण परीक्षण कवरेज बढ़ाना था, और निम्नलिखित समाधान मेरे लिए काम करता है।

मैंने अपनी कॉन्फ़िगरेशन क्लास को नीचे की तरह बदल दिया

@Configuration
public class Configuration {

  @Bean
  SimpleJdbcCall simpleJdbcCall(DataSource dataSource) {
    return new SimpleJdbcCall(dataSource).withProcedureName("");
  }

} 

मुझे नीचे की तरह अपनी टेस्ट क्लास बदलनी पड़ी। अब टेस्ट क्लास शिकायत नहीं कर रहा है, और मुझे कॉन्फ़िगरेशन क्लास का 100% कवरेज मिल रहा है।

@SpringBootTest
public class ConfigurationTest {

  @TestConfiguration
  static class MyConfiguration {
    @Bean
    DataSource dataSource() {
      return mock(DataSource.class);
    }
  }

  @Autowired
  private DataSource dataSource;

  @Autowired
  private Configuration configuration;

  @Test
  public void should_check_presence_of_simpleJdbcCall_Bean() {
    SimpleJdbcCall simpleJdbcCall = configuration.simpleJdbcCall(dataSource);
    Assertions.assertNotNull(simpleJdbcCall);
  }

}
0
Nahid Shah 24 नवम्बर 2020, 16:59