1

我可以将测试套件实现为 python 类/模块,以便我拥有测试用例模块和测试套件模块。我也想将测试套件中的参数传递给测试用例。

像这样的东西:

  • 测试套件模块:

    import unittest
    
    class GPUScoringMatrixTestSuite(unittest.TestSuite):
    
      def suite():
        suite = unittest.TestSuite()                                            
        suite.addTest(GPUScoringMatrixTestCase('PAM_350.txt'))
        suite.addTest(GPUScoringMatrixTestCase('PAM_250.txt'))                  
        self.run(suite)
    
  • 测试用例模块:

    class GPUScoringMatrixTestCase(unittest.TestCase):  
    
      def __init__(self, matrix_file): 
        self.filename = matrix_file  
    
      @classmethod 
      def setUpClass(self):  
        self.matrix = GPUScoringMatrix(self.filename) 
    
      def test_sum_penalties(self):   
        sum = 0
        for i in self.matrix.penalties: 
          sum += i
        self.assertEqual(sum, -970, 'Iconsistence penalties between scoring matrices')
    

参数 matrix_file 也不起作用......

4

2 回答 2

2

我不确定您要在这里做什么,看来您正在尝试编写代码来生成测试用例。为此,考虑到 Python 对象模型令人难以置信的灵活性可能会有所帮助。特别是,您可以生成类型:

def make_testcase(matrix_file):
    class MatrixTestCase(unittest.TestCase):
        pass
    MatrixTestCase.matrix_file = matrix_file
    return MatrixTestCase

PAM250Tests = make_testcase('PAM_250.txt')
PAM350Tests = make_testcase('PAM_350.txt')

我希望您那时不必干预测试套件和 unittest 的自动测试发现,而是自动拾取这两个 TestCase 派生类。

另一种方法是将矩阵文件作为常量存储在派生类中,将测试函数放在基类中。然后派生类从 unittest.TestCase 和附加基类派生。

于 2013-04-30T19:54:37.903 回答
0

我也不明白第一部分,但我尝试将参数从测试套件传递给测试用例。您正在正确地更改 . __init__,但是,旧__init__的正在做一些重要的事情,需要重新实现。

  • 测试套件模块:

    import unittest
    
    class GPUScoringMatrixTestSuite(unittest.TestSuite):
    
    def suite():
        suite = unittest.TestSuite()                                            
        suite.addTest(GPUScoringMatrixTestCase('test_sum_penalties', 'PAM_350.txt'))
        suite.addTest(GPUScoringMatrixTestCase('test_sum_penalties', 'PAM_250.txt'))                  
        self.run(suite)
    
  • 测试用例模块:

    class GPUScoringMatrixTestCase(unittest.TestCase):  
    
        def __init__(self, test_name, matrix_file):
            #Preform duties of old __init__
            super(GPUScoringMatrixTestCase, self).__init__(test_name)
            #Implement custom __init__ functionality
            self.filename = matrix_file
    
        @classmethod 
        def setUpClass(self):  
            self.matrix = GPUScoringMatrix(self.filename) 
    
        def test_sum_penalties(self):   
            sum = 0
            for i in self.matrix.penalties: 
                sum += i
            self.assertEqual(sum, -970, 'Iconsistence penalties between scoring matrices')
    
于 2013-07-01T18:02:40.810 回答