Unittest采用1个位置参数,但给出了2个



我正在尝试对我的代码进行单元测试,但我总是收到以下错误:

错误:test_FlipVerticaly1D_empty_array(main.TestMarginSampling(

追踪(最近一次通话(:文件";C: \Users\s\anaconda3\lib\unittest\mock.py";,线路1337,已修补return func(*newargs,**newkeywargs(类型错误:test_FlipVerticaly1D_empty_array((接受1个位置参数,但2个已给定

这是我班的代码:

class FlipVertically1D:   
@staticmethod 
def calc(data: np.ndarray) -> np.ndarray:
return - data

这里是我的单元测试代码:

import pandas as pd
import numpy as np
import unittest
from unittest.mock import patch, MagicMock
from ddt import ddt, data, file_data, idata, unpack

from augmentation.augment import FlipVertically1D as FlipV1D
from augmentation.augment import FlipHorizontally1D as FlipH1D
from augmentation.augment import RandomFlipping1D as RandF1D

@ddt
class TestMarginSampling1D(unittest.TestCase):

def set_up(self):
pass

def tear_down(self):
pass #del self.y_predict

def test_FlipVertically1D_empty_array(self):
empty = FlipV1D.calc(np.array([]))
self.assertTrue(len(empty))
#self.assertEqual(FlipV1D.calc(), 0)

我最初认为在某个地方我通过了self太多,但这并没有解决我的问题

问题可能是ddt注释。通常,单元测试用例看起来和您的代码完全一样,除了self之外没有其他参数。

单元测试示例:

import unittest
class TestStringMethods(unittest.TestCase):
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2)
if __name__ == '__main__':
unittest.main()

但随着ddt的出现,这种情况发生了变化,他们预计会出现第二个参数value:

https://ddt.readthedocs.io/en/latest/example.html

@ddt
class FooTestCase(unittest.TestCase):
def test_undecorated(self):
self.assertTrue(larger_than_two(24))
@data(3, 4, 12, 23)
def test_larger_than_two(self, value):
self.assertTrue(larger_than_two(value))

请注意,第一个示例(test_undecorated(看起来像您的代码,所以它似乎是要工作的,但可能就是不工作,并且无论如何都会转换方法。

相关内容

最新更新