Как я могу применить тесты JUnit к моим методам Insert (), update (), delete () без зависимости от базы данных (с Mockito) - PullRequest
0 голосов
/ 07 октября 2018

Я отправлю своим методам сущность в качестве их параметров, означая, что у меня уже есть информация, которую я хочу вставить, обновить или удалить из моей базы данных.Я ввел управляющему объектами имя моего модуля персистентности, так что я знаю, что он работает, имя моего управляющего объектом - «em».Я сопоставил свои классы из своей базы данных с подключением к базе данных, класс, над которым я работаю, назван «TipoUsuario». Это мои методы:

public void insert(TipoUsuario tipoUsuario) throws Exception {
    if (em != null) {
        em.persist(tipoUsuario);
    }
}

public void update(TipoUsuario tipoUsuario) throws Exception {
    if (em != null) {
        em.merge(tipoUsuario);
    }

}

public void delete(TipoUsuario tipoUsuario) throws Exception {
    if (em != null) {
        em.remove(tipoUsuario);
    }
}

Я работал над первым методом (вставка)но я не знаю, как проверить мой метод ... Это мой метод для проверки метода вставки:

@Test
public void testInsert() throws Exception {
    System.out.println("insert");
    TipoUsuario tipoUsuario = new TipoUsuario(1, "Mantenedor", "AC2354", true);
    //Instance of my class where I have my insert, update and delete methods
    Utilidades instance = new Utilidades();
    //I mock an entity manager with annotation @Mock and I pass that mocked entitytmanager to my the entitymanager that I have in my main class 
    instance.em = this.em;
    //and that's all i got.. I don't know how to test if it really works
    //i send my entity to my methor insert
    instance.insert(tipoUsuario);
    //i dont know what is return o how to use the assertEquals in this case...
    assertEquals( ?,  ?);
}

Я издевался над entitymanager, потому что это не часть моего кода, и я знаю, что другие уже проверяли ранееЕдинственное, что я хочу проверить, это если мой метод вставит информацию в базу данных.

Буду признателен за любую идею, которая у вас может быть.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

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

если entitymanager поддразнивается, то вызовы методов для него нереальны, поэтому реальных обновлений БД не будет.Как ответил Чарльз, вы можете проверить, что метод действительно вызывался один раз и только один раз, но проверка данных не имеет смысла для меня, если менеджер сущностей подвергается насмешкам.

Выполнение вставок в реальном времени (или любого реального вызова БД в этом отношении) в рамках модульных тестов нежелательно, так как модульные тесты обычно выполняются во время сборки, и в это время реальные БД могут быть недоступны.Если провальный модульный тест означает, что ваша сборка не удалась, у вас будут проблемы.

Если вы действительно хотите это сделать, попробуйте выполнить ваши тесты с некоторыми БД в памяти в контексте модульных тестов.

Кроме того, то, что вы пытаетесь выполнить, может подпадать под интеграционный тест, а не за модульный тест - подумайте об этом.

Если вы действительно заинтересованы в модульном тестировании вашего уровня JPA / DAO / Data, взгляните на Apache DBUnit и некоторые другие подобные фреймворки.

О DbUnit

JPAUnit - замена DBUnit в модульных тестах JPA

модульное тестирование JPA ..Остановите интеграционное тестирование!

0 голосов
/ 07 октября 2018

Вы можете использовать

Mockito.verify(em, Mockito.times(1)).persist(tipoUsuario);

Чтобы узнать, был ли метод сохранен 1 раз.

...