简体   繁体   中英

unittest, running test from other file

I can't seem to get the Test1.test_something() in test2 to work.. not sure if it's because they are both inheriting from the same base?

Helper.py:

class baseTest(unittest.TestCase):
    def setUp(self, param="Something"):
        print param
        pass 

Test1.py

from Helper import baseTest

class test1(baseTest):

    def setUp(self):
        super(test1, self).setUp('foo')        

    def test_something(self):
        assert 1 == 1, "One does not equal one."

Test2.py

from Helper import baseTest
import Test1

class test2(baseTest):

    def setUp(self):
        super(test2, self).setUp('bar')

    def test_something(self):
        Test1.test_somehing()

Now, I had this working previously, when I had the setUp for test1 and test2 within their classes, but once I had them both inherit from baseTest, I started getting a unbound method <method> must be called with Test instance as first argument (got nothing instead) . Any suggestions?

The problem is that Test1.test_something() is an instance method, not a class method. So you can't just call it like that (besides, even if it is class method, it should have been Test1.test1.test_something ).

One way to do it (without messing around with the unittest.TestCase mechanism):

Test2.py

import Test1

class test2(Test1.test1):
    # whatever else

And you're done, test2 inherits Test1.test1.test_something() automatically. If you need your test2 's test_something to do extra stuff, just do super(test2, self).test_something() within your overridden definition of test_something in test2 class.

Move the tests that are shared by both Test1 and Test2 classes into BaseTest :

test.py:

import unittest
import sys

class BaseTest(unittest.TestCase):
    def setUp(self, param="Something"):
        print param
        pass
    def test_something(self):
        assert 1 == 1, "One does not equal one."    

class Test1(BaseTest):
    def setUp(self):
        super(Test1, self).setUp('foo')        

test2.py:

import test
import unittest
import sys

class Test2(test.BaseTest):
    def setUp(self):
        super(Test2, self).setUp('bar')

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM