Spring Boot Unit Test для удаления, не является ли удаление объекта? - PullRequest
0 голосов
/ 07 июня 2019

Я написал простой метод тестирования для проверки метода «deleteQuizUser» для моего QuizUserService.

Сервис:

@Override
    public void deleteQuizUser(String id) throws QuizUserNotFoundException {
        if(this.quizUserRespository.findById(id).isPresent()) {
            QuizUser oldUser = this.quizUserRespository.findById(id).get();
            this.quizUserRespository.delete(oldUser);
        }
        else{
            throw new QuizUserNotFoundException();
        }
    }

Тест:

 @Test
    public void deleteQuizUser_withValidId() throws QuizUserNotFoundException {
        String userId = "SmitShah";
        this.quizUserService.deleteQuizUser(userId);

        QuizUser oldQuizUser = this.quizUserService.getQuizUserId(userId);

        assertThat(oldQuizUser).isNull();
    }

вышеуказанный тест не пройден, вместо этого он должен пройти.

Могу ли я узнать, где я не прав?

Обновление:

package Service;

import com.quizroulette.Entity.QuizUser;
import com.quizroulette.Exception.QuizUserNotFoundException;
import com.quizroulette.Repository.QuizUserRespository;
import com.quizroulette.Service.QuizUserService;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.context.annotation.Bean;
import org.springframework.test.context.junit4.SpringRunner;

import javax.transaction.Transactional;

import static org.assertj.core.api.Assertions.*;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

@Transactional
@RunWith(SpringRunner.class)
public class QuizUserServiceUnitTest {


    @TestConfiguration
    static class QuizUserServiceImplTestContextConfiguration {

        @Bean
        public QuizUserService quizUserService() {
            return new QuizUserService();
        }
    }

    @Autowired
    private QuizUserService quizUserService;

    @MockBean
    private QuizUserRespository quizUserRespository;

    @Before
    public void setUp(){
        QuizUser q1  = new QuizUser("SmitShah", "SmitPassword", true, false, false, "");
        QuizUser q2  = new QuizUser("SmitShah2", "Smit2Password", false, true, true, "");
        List<QuizUser> listUser = new ArrayList<QuizUser>();
        listUser.add(q1);
        listUser.add(q2);
        Mockito.when(quizUserRespository.findAll()).thenReturn(listUser);

        Mockito.when(quizUserRespository.findById(q1.getQuizUserId())).thenReturn(Optional.of(q1));
        Mockito.when(quizUserRespository.findById(q2.getQuizUserId())).thenReturn(Optional.of(q1));
    }

    @Test
    public void quizUserAutowired() {
        assertThat(this.quizUserService).isNotNull();
    }

    @Test
    public void updateOnlineState_SetTrueForQuizUser() throws QuizUserNotFoundException {
        this.quizUserService.setQuizUserOnline("SmitShah");

        QuizUser qu = this.quizUserService.getQuizUserId("SmitShah");
        assertThat(qu.isOnline()).isEqualTo(true);
    }

    @Test
    public void updateOnlineState_SetFalseForQuizUser() throws QuizUserNotFoundException {
        this.quizUserService.setQuizUserOnline("SmitShah2",false);

        QuizUser qu = this.quizUserService.getQuizUserId("SmitShah2");
        assertThat(qu.isOnline()).isEqualTo(false);
    }

    @Test
    public void updateActiveState_SetTrueForQuizUser() throws QuizUserNotFoundException {
        this.quizUserService.setQuizUserActive("SmitShah");

        QuizUser qu = this.quizUserService.getQuizUserId("SmitShah");
        assertThat(qu.isActive()).isEqualTo(true);
    }

    @Test
    public void updateActiveState_SetFalseForQuizUser() throws QuizUserNotFoundException {
        this.quizUserService.setQuizUserActive("SmitShah2", false);

        QuizUser qu = this.quizUserService.getQuizUserId("SmitShah2");
        assertThat(qu.isActive()).isEqualTo(false);
    }

    @Test
    public void updatePassword_SetNewPasswordForQuizUser() throws QuizUserNotFoundException {
        QuizUser oldQuizUser = this.quizUserService.getQuizUserId("SmitShah");
        String oldPassword = oldQuizUser.getPassword();
        QuizUser updated = new QuizUser("SmitShah", "SmitPassword2",
                true, false, false,
                "");
        QuizUser updatedQuizUser = this.quizUserService.updateQuizUser(updated);

        assertThat(updatedQuizUser.getPassword()).isNotEqualTo(oldPassword);
    }


    @Test
    public void deleteQuizUser_withValidId() throws QuizUserNotFoundException {
        String userId = "SmitShah";
        this.quizUserService.deleteQuizUser(userId);

        QuizUser oldQuizUser = this.quizUserService.getQuizUserId(userId);

        assertThat(oldQuizUser).isNull();
    }
}

Ответы [ 2 ]

0 голосов
/ 07 июня 2019

Вы должны аннотировать класс (QuizUserService) с помощью @InjectMocks, что означает, что это протестированный класс, чтобы внедрить все его зависимые классы, такие как QuizUserRespository.

0 голосов
/ 07 июня 2019

Я предполагаю, что ваш тест не выполняется в транзакционном контексте.

Поэтому удаляйте и не запускайте в одной транзакции.

Если вы добавите @Transactional в свой класс Testэто будет транзакция, и транзакция будет отменена в конце теста.

...