DDMAL / Rodan

:dragon_face: A web-based workflow engine.
https://rodan2.simssa.ca/
45 stars 13 forks source link

Fixtures curb tests #326

Closed lingxiaoyang closed 10 years ago

lingxiaoyang commented 10 years ago

I find loading fixtures is not a good idea to test our system.

    def setUp(self):
        self.test_workflow = Workflow.objects.get(uuid="ff78a1aa79554abcb5f1b0ac7bba2bad")
        self.test_project = Project.objects.get(uuid="9e8e928b4ec24a09b6113f1b0af1ea53")
        self.test_inputport = InputPort.objects.get(uuid="dd35645a7a7845c5a72c9a856ccb920e")
        self.test_workflowjob = WorkflowJob.objects.get(uuid="1e5d20a84d0f46cab47a2389a566ea06")

I am searching around a better solution for test set-up. Model factory seems good.

FYI: http://blog.namis.me/2012/04/21/burn-your-fixtures/

lingxiaoyang commented 10 years ago

@rberkow This might relate to #325

lingxiaoyang commented 10 years ago

After some research I am going to use Model Mommy to produce test data.

Original code using fixture (rodan/test/models/test_connection.py):

class ConnectionTestCase(TestCase):
    fixtures = ['1_users', '2_initial_data']

    def setUp(self):
        self.test_inputport = InputPort.objects.get(uuid="dd35645a7a7845c5a72c9a856ccb920e")
        self.test_outputport = OutputPort.objects.get(uuid="bbdd13ddf05844aa8549e93e82ae4fd2")
    ......

With Model Mommy:

class ConnectionTestCase(TestCase):
    fixtures = ['1_users']

    def setUp(self):
        self.test_inputport = mommy.make('rodan.InputPort')   # Mommy creates all the necessary foreign key objects automatically
        self.test_outputport = mommy.make('rodan.OutputPort', workflow_job__workflow=self.test_inputport.workflow_job.workflow)
    ......

Link to Model Mommy: http://model-mommy.readthedocs.org/en/latest/index.html