0

スレッドを使用して2つの異なるネットワークにpingを実行しようとしています。希望する応答を得ることができますが、それをテストに変換したいと思います。以下で試したコードがありますが、テストランナーはテストが実行されなかったと言っています。コードは以下のとおりです。

#!/home/workspace/downloads/Python-2.6.4/python
from threading import Thread 
import subprocess, unittest
from Queue import Queue 


class TestPing(unittest.TestCase):
    num_threads = 4 
    queue = Queue() 
    ips = ["10.51.54.100", "10.51.54.122"] 
    #wraps system ping command 
    def RunTest(i, q): 
        """Pings subnet""" 
        while True: 
            ip = q.get() 
            print "Thread %s: Pinging %s" % (i, ip) 
            ret = subprocess.call("ping -c 1 %s" % ip, 
                            shell=True, 
                            stdout=open('/dev/null', 'w'), 
                            stderr=subprocess.STDOUT) 
            if ret == 0: 
                print "%s: is alive" % ip
                assert True 
            else: 
                print "%s: did not respond" % ip 
                assert False
            q.task_done() 
        #Spawn thread pool 
        for i in range(num_threads): 

            worker = Thread(target=pinger, args=(i, queue)) 
            worker.setDaemon(True) 
            worker.start() 
            #Place work in queue 
        for ip in ips: 
            queue.put(ip) 
        #Wait until worker threads are done to exit     
            queue.join()


class PingTestSuite(unittest.TestSuite):

    def makePingTestSuite():
        suite = unittest.TestSuite()
        suite.addTest(TestPingMove("TestPing"))
        return suite

    def suite():
        return unittest.makeSuite(TestPing)

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

ネットワークが応答しない場合にテストでtrueとfalseのいずれかをアサートし、2つのネットワークにpingを実行するために2つのテストを実行する必要があります。誰かが私がどこで間違っているのか知っていますか?

4

1 に答える 1

3

をサブクラス化unittest.TestCaseすると、名前が で始まるすべてのメソッドがtest自動的に実行されます。それ以外の場合、コードはテストとして実行されません。(だからRunTest実行されていません)。

したがって、RunTest(それほど甘くない)に変更するとtest_RunTest

class TestPing(unittest.TestCase):
    def test_RunTest(self):
         add code here

その後、コードが実行されます。また、 unittest はtest_RunTestの最初で唯一の引数が であることを想定していることにも注意してくださいself

func(args)エラーが発生することをテストしたい場合は、次のself.assertRaisesように使用します。

self.assertRaises(AssertionError, func, args)

または、 または を返す場合はfunc、またはを使用して適切な値が返されることをテストできます。TrueFalseself.assertTrueself.assertFalse

また、単体テストを作成する場合は、すべての関数/クラスをモジュールに配置し、そのモジュールを unittest スクリプト用にインポートしてから、関数が unittest スクリプトで期待どおりの値を返しているかどうかをテストすることをお勧めします。私は間違っているかもしれませんが、現時点では 2 つの部分が混ざり合っているように見えます。

于 2010-01-26T14:38:27.317 に答える