Сопоставитель JDBI Тесты JUnit

Я хотел бы провести модульное тестирование своих классов сопоставления JDBI, поскольку не все выполняют тривиальное сопоставление свойств.

Мой тестовый класс выглядит следующим образом:

  public class IdentRuleMapperTest {

  @Mock
  ResultSet resultSet;

  @Mock
  ResultSetMetaData resultSetMetaData;

  @Mock
  StatementContext ctx;

  IdentRuleMapper mapper;

  @Before
  public void setup() {
    mapper = new IdentRuleMapper();
  }

  @Test
  public void mapTest() throws SQLException {
    Mockito.when(resultSet.getString("ID")).thenReturn("The ID");
    Mockito.when(resultSet.getString("NAME")).thenReturn("The name");
    Mockito.when(resultSet.getString("REGULATION")).thenReturn("CRS");
    Mockito.when(resultSet.getString("JSON_ACTIONS_STRING")).thenReturn("the json string");
    IdentRule identRule = mapper.map(0, resultSet, ctx);

  }
}

Тест бросает NPE на линию

Mockito.when(resultSet.getString("ID")).thenReturn("The ID");

Кто-нибудь может указать мне, почему это не сработает?


person Anselmus    schedule 31.07.2015    source источник
comment
Угадайте: вы использовали @RunWith(MockitoJUnitRunner.class), чтобы убедиться, что аннотация ResultSet оценивается?   -  person Florian Schaetz    schedule 31.07.2015


Ответы (2)


Аннотация @Mock сама по себе не создает фиктивные объекты. Вы должны добавить правило Mockito JUnit в качестве поле для вашего теста

@Rule
public MockitoRule rule = MockitoJUnit.rule();

или используйте его JUnit runner

@RunWith(MockitoJUnitRunner.class)
public class IdentRuleMapperTest {
  ...

или создайте макеты в методе @Before, используя MockitoAnnotations

@Before
public void initMocks() {
  MockitoAnnotations.initMocks(this);
}
person Stefan Birkner    schedule 31.07.2015

при настройке ожиданий для фиктивных объектов используйте Matchers для сопоставления аргументов.

Mockito.when(resultSet.getString( Matchers.eq("ID"))).thenReturn("The ID");
person kswaughs    schedule 31.07.2015