[Tutor] Newbie & Unittest ...

Damon Timm damontimm at gmail.com
Thu May 6 20:04:15 CEST 2010


Ooh!  Wait!  I found another method that is similar in style and
appears to work ...

class TestFileTags(unittest.TestCase):
    pass

for test_name, file, key, value in list_of_tests:
    def test_func(self):
        self.assertEqual(file.tags[key], value)

    setattr(TestFileTags, test_name, test_func)

I'm not sure if it is the *best* or *right* way to do it, but it does the trick!

Damon

On Thu, May 6, 2010 at 1:53 PM, Damon Timm <damontimm at gmail.com> wrote:
> 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