2012-01-05 2 views
3

С моим издевается на месте, я получаю ошибку:EasyMock дает неожиданные результаты, говорит, ожидается 1, фактическая 0

redisDao.someMethod(notNull(), notNull()): expected 1, actual 0 

Если удалить макет установки, то при трассировке в режиме отладки, он идет к метод redisDao.someMethod, а затем с ошибкой нулевого указателя.

Это не имеет смысла для меня, и не уверен, как это исправить?

mockMaker = EasyMock.createStrictControl(); 
redisDaoMock = mockMaker.createMock(redisDao.class); 

userService.setRedisDao(redisDaoMock); 

expect(redisDaoMock.someMethod(EasyMock.<String>notNull(), EasyMock.<String>notNull())).andReturn(someReturn); 

mockMaker.replay(); 
mockMaker.verify(); 

userController.get(request, response); 

// assertions here 
+3

Я не совсем уверен, но ты не должен ставить повторы и проверить или просто проверить после вызова метода? –

+0

Хороший улов, я думаю, что проверка() действительно идет после вызова метода. Он проверяет, что то, что вы ожидали, было вызвано. – Logan

+0

@srikanthradix это было спасибо. – Blankman

ответ

7

Я думаю, ваша проблема в том, что вы создаете «Строгий» фиктивный объект и ожидает, что вы вызываете метод вы кладете в ожидает(). Если ваш код не выполняет ожидаемый вызов метода, он дает ожидаемое 1 фактическое сообщение 0.

Вы можете использовать EasyMock.createNiceMock() вместо createStrictControl, и это должно исчезнуть. Или просто убедитесь, что ваш код вызывает метод, который вы укажете в вызове Expect.

Вам также может потребоваться добавить .anytimes() в конец вашего ожидающего вызова, так что даже если он не будет вызван, все будет в порядке.

This page has some good explanations and even has your error

+1

+1 добавление .anytimes() при разных вызовах метода, принадлежащих одному и тому же макету, сделало трюк для меня. – user1563633

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