egység teszt tavaszi indító szolgáltatási osztály, amely a függőség egy másik szolgáltató osztály

szavazat
0

Írok egy tavaszi indító többi szolgáltatás, amelyben igyekszem egység teszt egy osztály jegyzetekkel együtt @Service. Ez a szolgáltatás osztály belsőleg használ egy másik szolgáltató osztály. Itt a kód:

@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;
}

Itt látható a módszer az osztályban, amit kellene egység teszt:

@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();

Szeretném, hogy kigúnyolják a „DiscountTierService” belül használt „TieredClaimServiceImpl”

Az én egység vizsgálati osztály megpróbáltam, hogy kigúnyolják a hívást készül erre a szolgáltatásra:

DiscountTierService discountTierService = mock(DiscountTierService.class);

VAGY

DiscountTierService discountTierService = spy(new DiscountTierServiceImpl());

Ezek közül egyik sem működött.

Bár nem kapcsolódik közvetlenül volt egy kérdés ezzel kapcsolatos teljes solutioning itt

A kérdést 02/12/2019 23:56
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
0

Azt mondanak unit tesztek, de próbál létrehozni az integrációs teszt

@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(...);
    }
}

Ha el szeretné létrehozni egység teszt, akkor nem kell a legtöbb osztály kommentárok, csak @RunWith és beállított vizsgálati tulajdonságait lehet szükség (természetesen ebben az esetben nem lehet autowire adattárak, csak vak).

De ha keres az integrációs tesztet, ahol meg fogja hívni a vezérlő módszer, amely felhívja a szolgáltatás, akkor létre kell hozni MockMvc objektum egy önálló vezérlő. És ami a vezérlő objektum csak ezt a szolgáltatást konfiguráció - ebben az esetben, akkor az ellenőrzés az összes szükséges beágyazott objektumok (szolgáltatás, beágyazott szolgáltatás, adattárak).

Válaszolt 03/12/2019 01:02
a forrás felhasználó

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