unit test Jarní bota služba třída, která má závislost na jiné třídy služby

hlasů
0

Píšu do klidové službu jarní zavazadlového prostoru, ve kterém se snažím jednotky test třídu komentovaný s @Service. Tato třída služby interně používá jinou třídu služeb. Zde je 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;
}

Zde je metoda uvnitř třídy, který bych potřeboval jednotky test:

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

Chtěl bych, aby zesměšňovat ‚DiscountTierService‘ použitý v rámci ‚TieredClaimServiceImpl‘

V mém jednotka testovací třídě jsem se snažil zesměšňovat volání na tuto službu:

DiscountTierService discountTierService = mock(DiscountTierService.class);

NEBO

DiscountTierService discountTierService = spy(new DiscountTierServiceImpl());

Ani jeden z nich pracoval.

I když nejsou přímo spojeny Měl jsem dotaz týkající se celého tohoto solutioning zde

Položena 02/12/2019 v 23:56
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Říkáte o jednotkové testy, ale snaží se vytvořit integrační test

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

Pokud se chcete opravdu vytvořit jednotky test, nemusíte většinu třídy anotace, jen @RunWith a nastavit zkušební vlastnosti, pokud je to nutné (samozřejmě v tomto případě nelze autowire úložišť, jen mock).

Ale pokud hledáte na integrační zkoušku, kde budete volat metodu řadiče, který volá službu, musíte vytvořit MockMvc objekt s řadičem samostatný. A vytváření objektu řadiče stačí nastavit tuto konfiguraci služby - v tomto případě, můžete ovládat všechny požadované vnořené objekty (služba, vnořené služby, archivačních míst).

Odpovězeno 03/12/2019 v 01:02
zdroj uživatelem

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