2016-08-05 3 views
1

Я пытаюсь написать Спок Framework вместо JUnit,Mocking Не работает в Спока Framework

испытаний Класс:

class StudentServiceSpec extends Specification{ 

@Shared def studentDao 
@Shared def studentService 

def setupSpec(){ 
    studentDao = Mock(StudentDao) 
    studentService = new StudentService(studentDao) 
} 

def "Get Student Details Based on StudentId"(){ 

    setup: 
    1*studentDao.getStudent(67) >> new Student() 

    when: 
    Response response = studentService.getStudent("67") 
    println "** Response "+response 
    println "** Response "+response.getEntity() 

    then: 
    response != null 
    } 
} 

Когда я запускаю выше код, используя Maven чистой установки команды, я получаю следующая ошибка.

Ошибка:

1*studentDao.getStudent(67) >>> new Student() (0 invocations) 

Если я использую 0*studentDao.getStudent(67) >>> new Student() Я Getting response.getEntity() является null

ответ

2

Я нашел мою ошибку ...

я заменил следующий код

@Shared def studentDao 
@Shared def studentService 

def setupSpec(){ 
studentDao = Mock(StudentDao) 
studentService = new StudentService(studentDao) 
} 

с этими двумя линиями

StudentDao studentDao = Mock() 
StudentService studentService = new StudentService(studentDao) 

Если мы используем @Shared его насмешливый class, но не издеваясь method call

+0

Вы можете принять собственный ответ – kazanaki

+0

ничего себе, ты спас мою ночь :) thx – radio

0

Есть много причин, которые почему это не работает.

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

studentDao.getStudent(67) 

Проверьте, не использует ли ваш метод Dao метод getStudent длинный тип данных или тип данных int. То, что 67 может рассматриваться как int в вашем тестовом тесте, в то время как в вашем фактическом коде метод getStudent принимает только длинный тип данных. Таким образом, не высмеивая вызов studentDao.getStudent (67), чтобы вернуть новый Student().

Другой может быть, идентификатор был изменен до фактического вызова метода дао getStudent

так.

  1. проверить тип данных параметра вашего studentDao.getStudent (_), если его долго, попробуйте 67L в тесте
  2. проверки, если есть другой код изменения идентификатора перед тем вызовом вашего метода дао

Что касается результата с нулевой

0*studentDao.getStudent(67) >>> new Student() I am Getting response.getEntity() is null 

нулевая, как ожидается, так как нет насмешки вашего метода дао, чтобы вернуть объект Student.

Смежные вопросы