2017-02-10 67 views
1

我有三个不同版本的相同功能来执行计算。在给定相同的输入的情况下,所有三者将产生相同的输出。然而,区别在于三种功能的实施方式不同,可能在不同情况下表现更好/更差。鼻子测试相同功能的三个版本

一个类比就像有3个不同的排序功能。我如何使用鼻子测试编写单元测试,以免重复自己?

def sort_a(array): 
    """ 
    sort using and return 
    """ 
    return sorted_array 

def sort_b(array): 
    """ 
    sort using and return 
    """ 
    return sorted_array 

def sort_c(array): 
    """ 
    sort using and return 
    """ 
    return sorted_array 

我的测试可能是这样的:

class TestCore: 
    def test_sort_a_positive_vals(self): 
     # run test 

    def test_sort_a_negative_vals(self): 
     # run test 

    def test_sort_b_positive_vals(self): 
     # run test 

    def test_sort_b_negative_vals(self): 
     # run test 

    def test_sort_c_positive_vals(self): 
     # run test 

    def test_sort_c_negative_vals(self): 
     # run test 

感觉就像有很多冗余的位置。

回答

1

结账nose-parameterized

from nose_parameterized import parameterized 

def square_exp(x): 
    return x**2 

def square_mul(x): 
    return x*x 

class SquareTest(TestCase):  

    @parameterized.expand([(square_exp,), (square_mul,)]) 
    def test_square(self, square_impl): 
     self.assertEqual(square_impl(3), 9) 
+1

但是,这将需要添加nose_parameterized包。有没有办法直接在鼻子上做到这一点? – slaw

+0

那么,那又如何?添加包裹有什么问题? – wim

+1

试图减少依赖关系 – slaw