क्या विरासत में मिले @MockBean को वास्तविक @Bean से बदलना संभव है?

मेरे पास एक अमूर्त वर्ग है जो कई कॉन्फ़िगरेशन और सभी ITests के लिए एक सेटअप को परिभाषित करता है। केवल एक ही परीक्षण के लिए मैं असली बीन का उपयोग करना चाहता हूं, और नकली का उपयोग नहीं करना चाहता। लेकिन फिर भी बाकी कॉन्फ़िगरेशन इनहेरिट करते हैं।

@Service
public class WrapperService {
       @Autowired
       private SomeService some;
}

@RunWith(SpringRunner.class)
@SpringBootTest(...)
public abstract class AbstractITest {
    //many more complex configurations

    @MockBean
    private SomeService service;
}

public class WrapperServiceITest extends AbstractITest {
    //usage of SomeService should not be mocked
    //when calling WrapperService

    //using spy did not work, as suggested in the comments
    @SpyBean
    private SomeService service;;
}
6
membersound 6 अगस्त 2018, 13:56
this is invalid क्योंकि SomeService एक सार वर्ग है या कोई अन्य कारण है?
 – 
Mehraj Malik
6 अगस्त 2018, 14:03
मुझे लगता है कि आप असली बीन का उपयोग करने के लिए @SpyBean का उपयोग कर सकते हैं
 – 
Gundamaiah
6 अगस्त 2018, 14:04
क्योंकि @MockBean एक नकली है और इस प्रकार वास्तविक बीन के रूप में ऑटोवायर नहीं किया जा सकता है।
 – 
membersound
6 अगस्त 2018, 14:06

2 जवाब

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

एक संपत्ति पर एक परीक्षण @Configuration सशर्त का उपयोग करने का एक तरीका मिला, और उस संपत्ति को @TestPropertySource के साथ impl में ओवरराइड करना:

public abstrac class AbstractITest {    
    @TestConfiguration //important, do not use @Configuration!
    @ConditionalOnProperty(value = "someservice.mock", matchIfMissing = true)
    public static class SomeServiceMockConfig {
        @MockBean
        private SomeService some;
    }
}


@TestPropertySource(properties = "someservice.mock=false")
public class WrapperServiceITest extends AbstractITest {
    //SomeService will not be mocked
}
3
membersound 9 जिंदा 2019, 18:09

असली बीन का उपयोग करने के लिए @SpyBean का प्रयोग करें।

https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/mock/mockito/SpyBean.html

0
Gundamaiah 6 अगस्त 2018, 14:08
मैंने कोशिश की, लेकिन काम नहीं किया। बीन अभी भी नकली है, मेरा संपादन देखें।
 – 
membersound
6 अगस्त 2018, 14:10
@Autowired मॉक को ही इंजेक्ट करेगा।
 – 
membersound
6 अगस्त 2018, 14:24