Как мне посмеяться над sleep () в отличном модульном тесте? - PullRequest
2 голосов
/ 30 сентября 2010

Мне нужно выполнить модульное тестирование метода класса groovy, который использует sleep () для задержки обработки в цикле.

Очевидно, я не хочу, чтобы мой набор тестов действительно спал, поэтому я попытался смутитьвызов sleep () в моем классе:

MyClass.metaClass.sleep = { return }

Я попробовал несколько вариантов этого безуспешно.

Может кто-нибудь сказать мне правильный способ издеваться над этим языковым методом?

Ответы [ 4 ]

1 голос
/ 30 сентября 2010

Вы можете обернуть все вызовы системных функций через интерфейс.Таким образом, вы можете смоделировать вызовы любого метода, который вам нужен.Это увеличивает сложность кода, поэтому вам придется решить, стоит ли оно того.

0 голосов
/ 30 сентября 2010

Вы должны быть явными в аргументах и ​​соответствовать методу, который вы явно переопределяете.Опора на параметр по умолчанию "it" не работает.Обратите внимание, что переопределение статического метода работает только тогда, когда мы заявляем, что параметр является «длинным» (и это статический метод, а не метод экземпляра):

def s = ""
def firstCalled = false
def secondCalled = true

s.metaClass.static.sleep = { firstCalled = true }

assert firstCalled == false

s.metaClass.static.sleep = { long ms -> firstCalled = true }

assert secondCalled == true
0 голосов
/ 30 сентября 2010

Это работает для меня:

class Foo {
    def longSleep() { sleep 10000000 }   
}

Foo.metaClass.sleep = { int ms -> println "no sleep" }
new Foo().longSleep()

Обновление из tim_yates: sleep (ms) добавлено в Object в Groovy JDK.Больше информации здесь: http://groovy.codehaus.org/groovy-jdk/java/lang/Object.html

0 голосов
/ 30 сентября 2010

Код, вероятно, вызывает Thread.sleep не так ли?

Вы можете сделать это:

Thread.metaClass.static.sleep = { long time -> println "Sleep for $time" }

Но я не уверен, что это то, что вы хотите ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...