为什么在比较numpy.float64的两个实例时django Unittest会引发断言错误?

时间:2019-11-17 12:01:20

标签: python django pandas numpy django-unittest

我正在编写一些单元测试,其中之一是检查数据框中提供的数据是否为正确的类型(浮点型)。

我运行测试assertIsInstance(type(foo), np.float64)时测试失败,并显示以下错误消息:AssertionError <class numpy.float64> is not an instance of <class numpy.float64>

我希望这会过去。

test_dataframe_functions.py

import numpy as np
from django.test import TestCase
import pandas as pd
from myapp import dataframe_functions

class DataframeFunctionsTest(TestCase):
    dataframe_to_test = dataframe_functions.create_dataframe

    #passes
    def test_dataframe_is_definitely_a_dataframe(self):
        self.assertIsInstance(self.dataframe_to_test, pd.DataFrame)

    #passes
    def test_dataframe_has_the_right_columns(self):
        column_headers = list(self.dataframe_to_test.columns)
        self.assertEquals(column_headers, ['header1', 'header2', 'header3'])

    #fails with AssertionError <class numpy.float64> is not an instance of <class numpy.float64>
    def test_dataframe_header1_is_correct_format(self):
        data_instance = self.dataframe_to_test['header1'].iloc[1]
        self.assertIsInstance(type(data_instance), np.float64)

我已经通过以下代码行检查type(data_instance)是否等于“ class numpy.float64”:

print(type(dataframe_to_test['header1'].iloc[1]))

1 个答案:

答案 0 :(得分:1)

因为type对象实际上不是np.float64的实例。 assertIsInstance方法应该用assertIsInstance(object, type)调用,因此它检查object是否是type(的子类型)的实例。 type对象不是np.float64的实例。

因此,您应该使用以下方式调用它:

assertIsInstance(foo, np.float64)

不符合:

assertIsInstance(type(foo), np.float64)