У меня есть класс со следующим свойством clusters
:UnitTest реализация Python свойство
import numpy as np
class ClustererKmeans(object):
def __init__(self):
self.clustering = np.array([0, 0, 1, 1, 3, 3, 3, 4, 5, 5])
@property
def clusters(self):
assert self.clustering is not None, 'A clustering shall be set before obtaining clusters'
return np.unique(self.clustering)
Теперь я хочу, чтобы написать UnitTest для этого простого свойства. Я начинаю с:
from unittest import TestCase, main
from unittest.mock import Mock
class Test_clusters(TestCase):
def test_gw_01(self):
sut = Mock()
sut.clustering = np.array([0, 0, 1, 1, 3, 3, 3, 4, 5, 5])
r = ClustererKmeans.clusters(sut)
e = np.array([0, 1, 3, 4, 5])
# The following line checks to see if the two numpy arrays r and e are equal,
# and gives a detailed error message if they are not.
TestUtils.equal_np_matrix(self, r, e, 'clusters')
if __name__ == "__main__":
main()
Однако это не работает.
TypeError: 'property' object is not callable
Далее я изменить строку r = ClustererKmeans.clusters(sut)
на следующее:
r = sut.clusters
Но опять же, я получаю неожиданное сообщение об ошибке.
AssertionError: False is not true : r shall be a <class 'numpy.ndarray'> (is now a <class 'unittest.mock.Mock'>)
Есть ли простой способ проверить реализацию свойства в Python с использованием рамок unittest?
Если вы не выполняете 'r = sut.clusters'? Аргумент 'self' отправляется по умолчанию. Я вижу, что другая проблема 'sut.clustering' не является правильным способом инициализации переменной класса. Вы должны отправлять его в качестве аргумента при инициализации класса – karthikr
. Я попытался использовать 'r = sut.clusters', но в приведенном выше коде он возвращает объект Mock, а не массив numpy. – physicalattraction