Как я могу использовать пакет Groovy mock.interceptor для насмешки конструктора объектов? - PullRequest
3 голосов
/ 13 апреля 2009

В моей попытке смоделировать объект в Groovy с помощью пакета mock.interceptor:

def mock = new MockFor(TheClass);
mock.demand.theMethod{ "return" }
mock.use {
    def underTest = new TheClass()
    println underTest.theMethod()
}

Проблема, с которой я сталкиваюсь, заключается в том, что при создании TheClass() в блоке use{ он использует реальный конструктор, который в этих обстоятельствах я бы предпочел не использовать. Как я могу создать экземпляр этого класса, чтобы я мог протестировать метод, который меня интересует, theMethod, без необходимости использовать конструктор?

Используя EasyMock / CE, макеты можно создавать без использования конструктора, но мне любопытно, как этого добиться в Groovy.

Ответы [ 2 ]

2 голосов
/ 11 июня 2009

Я недавно видел презентацию автора GMock , и в ней есть несколько хуков, позволяющих насмехаться над "конструктором", что, я думаю, то, что вам нужно.

например.

 def mockFile = mock(File, constructor('/a/path/file.txt'))

Эта библиотека отличается от «встроенной» до «отличной», однако выглядела очень хорошо написанной, с некоторыми соображениями, касающимися видов вещей, которые вы хотите высмеивать, и, что более важно, сообщениями об ошибках, которые вы получите, когда тесты не пройдут. 1008 *

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

1 голос
/ 12 марта 2012

Вы можете использовать флаг interceptConstruction при вызове MockFor, см. MockFor .

...