Spring Boot - тест без пружинного контекста со Споком - PullRequest
0 голосов
/ 04 марта 2019

У меня есть класс обслуживания и метод с подписью:

@Service
public class FileService {
    ....
    ....
    public Optional<FileDescr> upload(MultipartFile uploadFile){...}

    public Resource downloadFile(int linkID){...}

}

И тестовый файл (Groovy):

import org.junit.experimental.categories.Category
import org.springframework.mock.web.MockMultipartFile
import spock.lang.Shared
import spock.lang.Specification

@Category(WithoutSpringContext)
class FileServiceTestWithoutSpringContext extends Specification{

    @Shared
    FileService fileService = Mock()

    @Shared
    MockMultipartFile mockMultipartFile = Mock()

    def setupSpec(){

    }

    def setup(){

    }

    def clean(){

    }

    def cleanSpec(){

    }

    def "upload file"(){
        given:
            fileService.upload(mockMultipartFile) >> true
        when:
            def result = fileService.upload(mockMultipartFile)
        then:
            result==true
    }

    def "download file if exists"(){
        given:
            fileService.downloadFile(1) >> true
        when:
            def result = fileService.downloadFile(1)
        then:
            result==true
    }
}

Я хотел бы протестировать метод с Mock, без контекста пружины,Как я должен это делать ?Теперь переменная result возвращает ноль.Я хотел бы установить возвращаемое значение метода.

1 Ответ

0 голосов
/ 12 марта 2019

Вы не можете комментировать макеты с помощью @Shared, и в этом нет никакого смысла. @ Shared предназначен для других целей :

Иногда вам необходимо разделить объект между методами объектов.Например, объект может быть очень дорогим для создания, или вы можете захотеть, чтобы ваши функциональные методы взаимодействовали друг с другом.Для этого объявите поле @Shared.

и далее :

... фиктивные объекты не должны храниться в статических или @Shared полях.

Просто удалите @Shared и спецификация будет работать нормально

...