Тесты не найдены в Mokito 2 с Junit 5 и весенней загрузкой 2 - PullRequest
0 голосов
/ 30 апреля 2020

Я новичок в тестовых случаях и пытаюсь выучить мокито 2 с помощью JUnit 5 и весенней загрузки 2. Я получаю

No tests found in StudentServiceTest
Is the method annotated with @Test?
Is the method public?

Я много гуглил. но не смог найти никакого рабочего решения.

build.gradle

    plugins {
    id 'java'
    id 'org.springframework.boot' version '2.2.6.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
}

group 'com.demo.mockito'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation('org.junit.jupiter:junit-jupiter-api:5.2.0')
    testCompile('org.junit.jupiter:junit-jupiter-params:5.2.0')
    testRuntime('org.junit.jupiter:junit-jupiter-engine:5.2.0')
    testCompile('org.springframework.boot:spring-boot-starter-test')
    testCompile 'org.mockito:mockito-core:2.21.0'
    testCompile 'org.mockito:mockito-junit-jupiter:2.23.0'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    runtimeOnly 'com.h2database:h2'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
    test {
        useJUnitPlatform()
    }
}

Контрольный пример

import com.demo.mockito.entity.StudentEntity;
import com.demo.mockito.repo.StudentRepository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.junit.MockitoJUnitRunner;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.when;
import org.mockito.Mock;
import org.mockito.Mock;
@RunWith(MockitoJUnitRunner.class)
@ExtendWith(MockitoExtension.class)
@DisplayName("Spring boot 2 mockito2 Junit5 example")
public class StudentServiceTest {
    @InjectMocks // it will mock and inject all the required dependency
    private StudentService studentService;
    @Mock // mock because we don't want to call actual repo class
    private StudentRepository studentRepository;
    public StudentServiceTest() {
    }
    @BeforeEach
    void setMockOutput() {
//        because we are mocking repo, we need to define how repo will work in case of call
        List<StudentEntity> collect = Stream.of(
                new StudentEntity("shrikant", new Date()), new StudentEntity("sharma", new Date())).collect(Collectors.toList());
        when(studentRepository.findAll()).thenReturn(collect);
    }
    @Test
  public   void findAll() {
        assertEquals(2, studentService.findAll().size());
    }

Репозиторий

import com.demo.mockito.entity.StudentEntity;
import org.springframework.data.jpa.repository.JpaRepository;    
public interface StudentRepository extends JpaRepository<StudentEntity, Long> {
}

service

package com.demo.mockito.service;
import com.demo.mockito.entity.StudentEntity;
import com.demo.mockito.model.Student;
import com.demo.mockito.repo.StudentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.logging.Logger;
@Service
public class StudentService {
    Logger logger = Logger.getLogger(this.getClass().getName());
    @Autowired
    private StudentRepository studentRepository;
    public List<Student> findAll() {
        List<Student> students = new ArrayList<>();
        List<StudentEntity> all = studentRepository.findAll();
        all.forEach(studentEntity -> students.add(new Student(studentEntity.getRollNo(), studentEntity.getName(), studentEntity.getDate())));
        logger.info("StudentService.findAll " + students);
        return students;
    }
}

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

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Спасибо, Мишель, просто чтобы помочь кому-нибудь еще, пришедшему сюда с такой же проблемой.

   import com.demo.mockito.entity.StudentEntity;
    import com.demo.mockito.repo.StudentRepository;
    import org.junit.jupiter.api.DisplayName;
    import org.junit.jupiter.api.Test;
    import org.junit.jupiter.api.extension.ExtendWith;
    import org.mockito.InjectMocks;
    import org.mockito.Mock;
    import org.mockito.junit.jupiter.MockitoExtension;   
    import java.util.Date;
    import java.util.List;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;   
    import static org.junit.jupiter.api.Assertions.assertEquals;
    import static org.mockito.Mockito.when;   
    @ExtendWith(MockitoExtension.class)
    @DisplayName("Spring boot 2 mockito2 Junit5 example")
    public class StudentServiceTest {   
        @InjectMocks // it will mock and inject all the required dependency
        private StudentService studentService;
        @Mock // mock because we don't want to call actual repo class
        private StudentRepository studentRepository;   
       public StudentServiceTest() {
        }   
        @Test
        public void findAll() {
            //        because we are mocking repo, we need to define how repo will work in case of call
            List<StudentEntity> collect = Stream.of(
                    new StudentEntity("shrikant", new Date()), new StudentEntity("sharma", new Date())).collect(Collectors.toList());
            when(studentRepository.findAll()).thenReturn(collect);
            assertEquals(2, studentService.findAll().size());
        }
}

build.gradle

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.2.6.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
}
group 'com.demo.mockito'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    runtimeOnly 'com.h2database:h2'
    testImplementation('org.junit.jupiter:junit-jupiter-api:5.2.0')
    testCompile('org.junit.jupiter:junit-jupiter-params:5.2.0')
    testRuntime('org.junit.jupiter:junit-jupiter-engine:5.2.0')
    testCompile 'org.mockito:mockito-junit-jupiter'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}
test {
    useJUnitPlatform()
}

Хранилище

import com.demo.mockito.entity.StudentEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface StudentRepository extends JpaRepository<StudentEntity, Long> {
}
0 голосов
/ 30 апреля 2020

Ваш build.gradle может быть немного переставлен

  1. Переместите
test {
    useJUnitPlatform()
}

из зависимостей в root.

У вас есть два раза зависимость от 'org.springframework.boot:spring-boot-starter-test'. Пожалуйста, удалите один без исключения

Пожалуйста, удалите зависимость от mockito-core, поскольку она входит транзитивно

Пожалуйста, удалите версию зависимости org.mockito:mockito-junit-jupiter

Вы можете преобразовать зависимости, такие как test-зависимости go last

Вы можете объединить использование implementation и compile

В конце оно должно выглядеть примерно так:

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.2.6.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
}

group 'com.demo.mockito'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    runtimeOnly 'com.h2database:h2'

    testImplementation('org.junit.jupiter:junit-jupiter-api:5.2.0')
    testCompile('org.junit.jupiter:junit-jupiter-params:5.2.0')
    testRuntime('org.junit.jupiter:junit-jupiter-engine:5.2.0')
    testCompile 'org.mockito:mockito-junit-jupiter'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

test {
    useJUnitPlatform()
}

После того, как Junit4 ушел из вашего classpath, вам придется изменить некоторые части вашего кода (например, @Runwith)

Кроме того, я не вижу аннотации @Repository в вашем хранилище.

...