Problem związany z python,
rozszerzam kasę do testów jednostkowych unittest.TestCase o nowe funkcjonalności.
Jedną z funkcjonalności, które dodałem to periodyczne sprawdzanie czy jakaś funkcja zwraca właściwą wartość w ciągu określonego czasu (czekanie, aż zwraca właściwą wartość).
Problem jest w tworzeniu logów. Jeśli do tej metody podana jest funkcja log jest sensowny podaje tylko nazwę funkcji (functObject._ name _).
Jeśli jednak użyje wyrażenie lambda to w logach pojawia mi się "<lambda>" co nie jest dość opisowe.
Potrzebuje wyciągnąć kod tego wyrażenia lambda, by go umieścić w logach.
Jak to zrobić?
obecnie jedna z metod wygląda tak:
def waitForAsertEqual(self, periodicCheck, expectedValue, msg="", timeout=20, sleep=1) :
assert(type(periodicCheck) == types.FunctionType or
type(periodicCheck) == types.LambdaType)
start = time.time()
stop = start + timeout
debug("Waiting for '%s' to return expected value: '%s' in time of %.1fs."
%(periodicCheck.__name__, expectedValue, timeout))
while stop > time.time() :
if periodicCheck() == expectedValue :
debug("'%s' has returned expected value: '%s' after %.1fs."
%(periodicCheck.__name__, expectedValue, time.time()-start))
return
time.sleep(sleep)
debug("waitForAsertEqual has timed out after %ss." %timeout)
value = periodicCheck()
self.assertEqual(value, expectedValue, "%s\n"
"Values are different, have value: %s\n"
" expected value is: %s\n"
%(msg, value, expectedValue))
return