2016-05-05 7 views
0

Я пытаюсь проверить метод() метод findById в классе ниже, который считывает данные из моей базы данных с помощью CrudRepository:Развязка теста Mockito от значения специфического теста?

Класс испытываемого:

public interface PersonRepository extends CrudRepository<Person, Integer> 
{ 

    Person findById(String id); 
} 

Ниже мой тестовый класс, тест в настоящее время проходит, но я хотел бы изменить его так, что если идентификатор «1», который я тестирую, удаляется из моей базы данных, я все равно могу выполнить свой тест. То есть не полагайтесь на данные в базе данных.

Как это сделать?

тест:

public class PersonRepositoryTest { 

    @Mock 
    private PersonRepository personRepository; 

    @Before 
    public void setUp() throws Exception { 
     //Initialize the mocked class and ensure that it is not null 
     MockitoAnnotations.initMocks(this); 
     assertThat(personRepository, notNullValue()); 
    } 

    @Test 
    public void testFindById() throws ParseException { 

     //test string 
     String id = "1"; 

     //when it is called, return 
     when(personRepository.findById(anyString())).thenReturn(new Person()); 

     Person person = personRepository.findById(id); 
     assertThat(person, notNullValue()); 
    } 
} 
+1

Что вы описываете на самом деле то, что достигается с помощью макета рамки: Вы не используете реальную базу данных, но определить ответы заранее. Ваш текущий mock всегда будет возвращать новый экземпляр Person, независимо от того, какой идентификатор вы запрашиваете. – Thomas

+0

Итак, как мне изменить текущий тест? – java123999

+0

Непонятно, чего бы вы хотели достичь, вы уже независимы от реальной базы данных. Итак, какова ваша цель? – Thomas

ответ

0

Как уже упоминалось в комментариях к сообщению @Thomas, вы просто издевается базу данных. Я предполагаю, что вы хотите написать отрицательный тестовый пример, когда идентификатор равен 1.

Вы можете просто вернуть null, а не человека Object. Вместо Matchers, передайте определенное значение, чтобы отличить ваши положительные и отрицательные тестовые случаи.

Положительный Case -

when(personRepository.findById(2)).thenReturn(new Person()); 

Отрицательный случай -

when(personRepository.findById(1)).thenReturn(null); 
+0

, но в моем тесте есть personRepository, не вызывающий базу данных для поиска идентификатора «1»? – java123999

+0

Нет, вот почему tou представил макет, чтобы быть независимым от реальной базы данных. – Thomas

+0

Thats, что это за штука? С макетами вы просто издеваетесь над поведением реального взаимодействия с БД для модульного тестирования. –