Вы пытаетесь протестировать класс, который использует bean-компоненты без запуска контекста приложения Spring.
Есть несколько способов решить вашу проблему.
- Сделать Spring для запуска приложенияконтекст.Вы можете сделать это, добавив:
@SpringBootTest
и @RunWith(SpringRunner.class)
аннотации к вашему тестовому классу.Примерно так:
@SpringBootTest
@RunWith(SpringRunner.class)
public class controladorTest {
...
}
Таким образом, будет создан контекст приложения Spring - но вам не нужно высмеивать экземпляр вашего контроллера - так как он уже создан - так что вы можете просто подключить его автоматически:
@SpringBootTest
@RunWith(SpringRunner.class)
public class controladorTest {
@Autowired
private controlador controlador;
...
}
и удалите следующие строки:
static controlador mockInstanced;
@BeforeClass
public static void setup() throws Exception {
mockInstanced= new controlador();
mockInstanced.conn = mock(JdbcTemplate.class);
}
Другой теоретический способ - это смоделировать
JdbcTemplate
и вставить его в ваш макет, используя
@InjectMocks
- но я бы не рекомендовал это делать - слишком громоздкое и хрупкое решение. Кроме того, принимая во вниманиечто ваш контроллер использует только
JdbcTemplate
в качестве зависимости, вы можете использовать встроенную
DB для Junit и создать
JdbcTemplate
вручную и внедрить его в свой контроллер - в этом случае нет необходимостисоздайте контекст приложения, и вы можете просто вручную создать экземпляр контроллера и передать ему JdbcTemplate.См.
this для получения дополнительной информации
Так что после шага 1 ваш код должен выглядеть следующим образом:
@SpringBootTest
@RunWith(SpringRunner.class)
public class controladorTest {
@Autowired
private controlador controlador;
/**
* Test of getListadoPantallaTab method, of class controlador.
*/
@Test
public void testGetListadoPantallaTab() {
System.out.println("Test unitario getListadoPantallaTab: ");
@SuppressWarnings("serial")
Map<String, Object> dto = new HashMap<String, Object>() {{
put("Inicio", 1);
put("fin", 15);
}};
controlador.getListadoPantallaTab(dto);
}
}
Кстати, пожалуйста, посмотрите на Соглашения об именах Java - чтобы сделать ваш код более читабельным.
Подробнее о тестировании с пружиной здесь