Hi Stefan,
I tried to narrow down the code to only the relevant information. The local
variables like values, schedules and delays are usually a result of some
business logic (and are passed to the processes as arguments).
I'm struggling with writing tests for these methods. I know there are a couple
of different issues here, but mostly I would like to test that a process
starts the correct processes (I thought about maybe using something like
assert_called_with from unittest.mock) and that a process is created at the
right time (given its parent processes). I'm sorry to bother you, but I'm a bit
lost:)
Thanks,
Adam
import simpy
env = simpy.Environment()
class Example1(object):
def __init__(self):
self.attribute = []
self.example_2_objects = []
def parent_process(self, env, example_3_object):
env.process(self.child_process_1(env))
yield env.process(example_3_object.child_process_2(env, self))
env.process(self.child_process_3(env, example_3_object))
def child_process_1(self, env):
value = 2
delay = 2
for x in range(value):
schedule = [1,2]
for x in schedule:
example_2_object = Example2()
self.example_2_objects.append(example_2_object)
env.process(example_2_object.grandchild_process_1(env, self))
yield env.timeout(delay)
def child_process_3(self, env, example_3_object):
while True:
if len(self.attribute) < 1:
yield env.process(example_3_object.child_process_2(env, self))
else:
yield env.timeout(1)
def grandchild_process_2(self, env):
self.attribute.append('something')
yield env.timeout(1)
class Example2(object):
def __init__(self):
self.attribute = []
self.example_4_objects = []
def grandchild_process_1(self, env, example_1_object):
delay = 2
schedule = [0,1]
for x in schedule:
yield env.timeout(delay)
example_4_object = Example4()
self.example_4_objects.append(example_4_object)
example_4_object.great_grandchild_fuction_1(example_1_object, self)
class Example3(object):
def child_process_2(self, env, example_1_object):
delay = 1
yield env.timeout(delay)
env.process(example_1_object.grandchild_process_2(env))
class Example4(object):
def great_grandchild_fuction_1(self, example_1_object, example_2_object):
if len(example_1_object.attribute) > 0:
something = example_1_object.attribute.pop(-1)
example_2_object.attribute.append(something)
example_3_object = Example3()
example_1_object = Example1()
env.process(example_1_object.parent_process(env, example_3_object))
env.run(20)