将numpy.testing函数与unittest结合使用

时间:2020-05-22 08:22:29

标签: python numpy python-unittest

我在单元测试环境中使用numpy.testing.assert_almost_equal-但我不确定将numpy和unittest结合使用的正确方法。

我的第一种方法是将unittest中的assertTrue与is None比较结合使用,如下所示:

from unittest import TestCase
import numpy as np

class TestPredict(TestCase):
    def test_succeeding(self):
        self.assertTrue(
            np.testing.assert_almost_equal(1, 0.9999999999999) is None
        )
    def test_failing(self):
        self.assertTrue(
            np.testing.assert_almost_equal(1, 0.9) is None
        )

这给出了正确的测试结果,但是它有点笨拙,并且使测试代码膨胀。

以下是一种更简单的方法:

from unittest import TestCase
import numpy as np

class TestPredict(TestCase):
    def test_succeeding(self):
        np.testing.assert_almost_equal(1, 0.9999999999999)
    def test_failing(self):
        np.testing.assert_almost_equal(1, 0.9)

此代码还可以返回上述正确的测试统计信息,但可读性更高。我看到的唯一缺点是pylint抱怨“ R0201方法可能是函数”消息。这会成为问题吗?

PS:我在SO上检查了多个帖子,这些帖子似乎相关,但没有回答有关unittest和numpy测试集成的具体问题。 (例如https://stackoverflow.com/a/4319870/6018688谈论在单元测试中捕获异常。这似乎是错误的,或者仅仅是一个过大的杀伤力。)

1 个答案:

答案 0 :(得分:2)

如果您处于unittest环境中,则可以进行第二次尝试。如果您不想使用pylint警告,可以通过以下方法创建静态函数:

from unittest import TestCase
import numpy as np

class TestPredict(TestCase):
    @staticmethod
    def test_succeeding():
        np.testing.assert_almost_equal(1, 0.9999999999999)

    @staticmethod
    def test_failing():
        np.testing.assert_almost_equal(1, 0.9)

请注意,pylint基本上只是警告未使用的self参数-除了警告本身之外,这不会引起任何问题。

如果您可以改用pytest,则代码将变得更加简洁,因为您不必从测试用例类派生:

import numpy as np

def test_succeeding():
    np.testing.assert_almost_equal(1, 0.9999999999999)

def test_failing():
    np.testing.assert_almost_equal(1, 0.9)