为什么 django Unittest 在比较两个 numpy.float64 实例时抛出断言错误?

Why does django Unittest throw an assertion error when comparing two instances of numpy.float64?

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

当我 运行 测试时 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]))

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

的实例

因此你应该这样调用:

assertIsInstance(<b>foo</b>, np.float64)

不适合:

assertIsInstance(<s>type(foo)</s>, np.float64)