इकाई परीक्षण स्प्रिंग बूट सेवा वर्ग एक और सेवा वर्ग पर निर्भरता है कि

वोट
0

मैं एक वसंत बूट बाकी सेवा है, जिसमें इकाई परीक्षण करने के लिए एक वर्ग @Service साथ एनोटेट कोशिश कर रहा हूँ ऊपर लिख रहा हूँ। यह सेवा वर्ग आंतरिक रूप से एक और सेवा वर्ग का उपयोग करता है। यहाँ कोड है:

@Service
public class TieredClaimServiceImpl implements TieredClaimService {

//this is the second service used within 
// commented out setter injection and used constructor injection 
// @Autowired
private DiscountTierService discountTierService;

@Autowired
public TieredClaimServiceImpl(MerchRepository merchRepository,SalesRepository 
         salesRepository,DiscountTierService discountTierService) {
    this.merchRepository = merchRepository;
    this.salesRepository = salesRepository;
    this.discountTierService = discountTierService;
}

यहाँ वर्ग है कि मैं इकाई परीक्षण करने की आवश्यकता होगी के भीतर विधि है:

@Override
public List <TieredClaimDto>  calculateClaim(ClaimRequestDto claimRequestDto,String xAppCorelationId) throws SystemException {

    /** get the discount tier config data  - this is where we are using the other service **/
    List<DiscountTierDto> discountTierList = discountTierService.get();

मैं 'DiscountTierService' 'TieredClaimServiceImpl' के भीतर इस्तेमाल नकली चाहते हैं

मेरी इकाई परीक्षण वर्ग में मैं इस सेवा के लिए बनाया जा रहा कॉल नकली करने की कोशिश की:

DiscountTierService discountTierService = mock(DiscountTierService.class);

या

DiscountTierService discountTierService = spy(new DiscountTierServiceImpl());

इनमें से कोई भी काम किया।

हालांकि सीधे संबंधित नहीं मैं इस पूरे solutioning से संबंधित एक प्रश्न था यहाँ

02/12/2019 को 23:56
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
0

आप इकाई परीक्षण के बारे में कह रही है लेकिन एकीकरण परीक्षण बनाने के लिए कोशिश कर रहे हैं

@SpringBootTest
@ActiveProfules(value = "test")//or @TestPropertySource(s)
@RunWith(value = SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {SomeTestConfiguration.class})
public class SomeTestClass {

    @Autowired//or @Mock
    private MerchRepository merchRepository;

    @Autowired//or @Mock
    private SalesRepository salesRepository;

    @Mock
    private DiscountTierService discountTierService;

    private TieredClaimService service;

    @Before
    public void setup() {
        service = new TieredClaimServiceImpl(merchRepository, salesRepository, discountTierService);
    }

    @Test
    public void test() {
        //arrange
        var dto1 = new DiscountTierDto(...);
        var dto2 = new DiscountTierDto(...);
        var someList = List.of(dto1, dto2);
        when(discountTierService.get()).thenReturn(someList);
        //act
        service.calculateClaim(someClaimRequestDto, someAppCorrelationId);
        //assert
        Assert.assertThat(...);
    }
}

क्या तुम सच में एक इकाई परीक्षण का निर्माण करना चाहते हैं, तो आप सबसे अधिक वर्ग एनोटेशन, बस @RunWith, और सेट परीक्षण गुण की जरूरत नहीं है, यदि आवश्यक हो (बेशक, इस मामले में, आप कर सकते हैं autowire नहीं खजाने, बस नकली)।

लेकिन अगर आप एकीकरण परीक्षण जहां एक नियंत्रक विधि है जो सेवा कॉल कॉल करेंगे पर देख रहे हैं, तो आप एक स्टैंडअलोन नियंत्रक के साथ MockMvc वस्तु बनाने के लिए की जरूरत है। और नियंत्रक वस्तु सिर्फ इस सेवा कॉन्फ़िगरेशन सेट बनाने - इस मामले में, आप सभी आवश्यक नेस्टेड वस्तुओं (सेवा, नेस्टेड सेवा, खजाने) नियंत्रित कर सकते हैं।

03/12/2019 को 01:02
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more