Estoy escribiendo pruebas unitarias para servicios, controladores, etc., sin embargo, hay un @Component que tiene los siguientes valores

@Component
Public class myclass
   @Autowired
   Private MyTemplate myTemplate

   @Value("$someString")
   Private String someString

   @PostConstruct
   Public void loadString()
      ...

¿Cómo cargaría manualmente valores en @Values? Lo he probado con Mocks, TestPropertySource, ReflectionTestUtils, entre otras formas encontradas

1
Panda 16 oct. 2018 a las 17:48

2 respuestas

La mejor respuesta

Puede inyectar el @Value en la clase de prueba mediante ReflectionTestUtils. Cargue contenedor solo en caso de controladores. Para escribir casos de prueba para servicios y dao, no necesita cargar el contenedor de resorte.

public class TestClass{
 private @InjectsMock ServiceClass service; 

 @BeforeAll
 public void setUp(){
    ReflectionTestUtils.setField(service, "someString", "someValue");
 }

//your test cases over here.
}
0
Gaurav Srivastav 16 oct. 2018 a las 16:32

Puedo pensar inmediatamente en dos opciones

1) Puede definir $ someString en su test / resources / test.properties

@RunWith(SpringRunner.class)
@TestPropertySource(locations="classpath:test.properties")
public class ClassTest {

  }

2) hazlo manualmente

@RunWith(SpringRunner.class)
public class ClassTest {

    @Autowired
     private MyClass miclass;

 @Before
 public void setupObject() {
     miclass.setProperty("someting");
  }

  }
0
Fernix 16 oct. 2018 a las 16:32