鼻子测试相同功能的三个版本

时间:2017-02-10 20:37:32

标签: python unit-testing nose

我有三个不同版本的相同功能执行计算。给定相同的输入,所有三个将产生相同的输出。但是,不同之处在于这三个功能的实现方式不同,在不同的情况下可能表现得更好/更差。

类比就像有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 个答案:

答案 0 :(得分: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)