prueba de unidad de clase de servicio de inicio de primavera que tiene la dependencia de otra clase de servicio

votos
0

Estoy escribiendo un servicio resto de arranque de primavera en la que estoy tratando de probar la unidad una clase anotada con @Service. Esta clase de servicio internamente utiliza otra clase de servicio. Aquí está el código:

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

Aquí está el método dentro de la clase que iba a necesitar a prueba de unidad:

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

Quisiera burlarse de la 'DiscountTierService' se utiliza dentro de 'TieredClaimServiceImpl'

En mi clase de prueba de unidad Traté de burlarse de la llamada que se realizan para este servicio:

DiscountTierService discountTierService = mock(DiscountTierService.class);

O

DiscountTierService discountTierService = spy(new DiscountTierServiceImpl());

Ninguno de estos trabajado.

Aunque no directamente relacionado con que tenía una pregunta relacionada con todo este solubilización aquí

Publicado el 02/12/2019 a las 23:56
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

Usted está diciendo acerca de las pruebas de unidad, pero tratando de crear la prueba de integración

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

Si quieres realmente para crear una prueba de unidad, que no es necesario la mayoría de las anotaciones de clase, sólo @RunWith, y establecer las propiedades de la prueba si es necesario (por supuesto, en este caso, puede repositorios no Autowire, simplemente simulado).

Pero si usted está buscando en la prueba de integración donde se llame a un método controlador que llama al servicio, es necesario crear el objeto MockMvc con un controlador independiente. Y crear el objeto controlador acaba de establecer esta configuración del servicio - en este caso, puede controlar todos los objetos anidados requeridos (de servicios, servicios anidada, repositorios).

Respondida el 03/12/2019 a las 01:02
fuente por usuario

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