I have a class named Tower
:
class Tower:
def __init__(self, # params..):
# some settings of variables
add_game_turn_event(self._update)
def turn_result(self):
# some action
as you can see, turn_result
is subscribed to a collection of methods which invokes every x seconds:
game_turn_events = []
def add_game_turn_event(function):
game_turn_events.append(function)
async def _game_turn():
while True:
threading.Timer(sec_per_turn, _game_turn).start()
for function in game_turn_events:
function()
now I want to write a unit test (using the unittest
module) that creates a tower, and then checks how the tower has changed after turn_result
is invoked once. I don't really know how to do it. I though about something like:
def test_tower_updating(self):
tower = Tower( # params..)
add_game_turn_event(lambda: self._test_tower_updating(tower, 10 + levels[2].yield_per_turn))
def _test_tower_updating(self, tower, expected):
self.assertTrue(tower.warriors_group.soldiers_amount == expected)
but this does not wait for the function to be invoked and gives false positive anyways. the problem is, that _game_turn()
is async, so it dosen't wait for it to finish. await
won't work here, because I dont call _game_turn()
directly, rather I update a global variable it uses.
How can I test such thing?