[Tutor] Newbie & Unittest ...

Damon Timm damontimm at gmail.com
Thu May 6 19:53:08 CEST 2010


Hi Lie -

Thanks for that idea -- I tried it but am getting an error.  I read a
little about the __dict__ feature but couldn't figure it.  I am going
to keep searching around for how to dynamically add methods to a class
... here is the error and then the code.

Thanks.

# ERROR:

$ python tests_tagging.py
Traceback (most recent call last):
  File "tests_tagging.py", line 25, in <module>
    class TestFileTags(unittest.TestCase):
  File "tests_tagging.py", line 31, in TestFileTags
    __dict__[test] = new_test
NameError: name '__dict__' is not defined

# CODE:

import unittest
from mlc.filetypes import *

TAG_VALUES = (
    ('title', 'Christmas Waltz'),
    ('artist', 'Damon Timm'),
    ('album', 'Homemade'),
)

FILES = (
    FLACFile('data/lossless/01 - Christmas Waltz.flac'),
    MP3File('data/lossy/04 - Christmas Waltz (MP3-79).mp3'),
    OGGFile('data/lossy/01 - Christmas Waltz (OGG-77).ogg'),
    MP4File('data/lossy/06 - Christmas Waltz (M4A-64).m4a'),
)

list_of_tests = []
for file in FILES:
    for k, v in TAG_VALUES:
        test_name = 'test_' + file.exts[0] + '_' + k
        list_of_tests.append((test_name, file, k, v))

class TestFileTags(unittest.TestCase):

    for test in list_of_tests:
        def new_test(self):
            self.assertEqual(test[1].tags[test[2]],test[3])

        __dict__[test] = new_test

if __name__ == '__main__':
    unittest.main()


On Thu, May 6, 2010 at 12:26 PM, Lie Ryan <lie.1296 at gmail.com> wrote:
> On 05/06/10 10:37, Damon Timm wrote:
>> Hi - am trying to write some unit tests for my little python project -
>> I had been hard coding them when necessary here or there but I figured
>> it was time to try and learn how to do it properly.
>> <snip>
>> This test works, however, it only runs as *one* test (which either
>> fails or passes) and I want it to run as 12 different tests (three for
>> each file type) and be able to see which key is failing for which file
>> type.  I know I could write them all out individually but that seems
>> unnecessary.
>
> One way to do what you wanted is to harness python's dynamicity and
> generate the methods by their names:
>
> class TestFiles(unittest.TestCase):
>    for methname, case in somedict:
>        def test(self):
>             ...
>        __dict__[methname] = test
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>


More information about the Tutor mailing list