Могу ли я сравнить 2 числа с плавающей точкой в ​​unittest для сходства, но не для равенства? - PullRequest
0 голосов
/ 20 мая 2018

У меня есть этот тест выше.Моя проблема заключается в том, что после обучения моим моделям машинного обучения результат каждый раз немного отличается.

Итак, я хотел бы утверждать ИСТИНА, если они похожи в моем Flask-api.

The ChangeToSurvive - это float, поэтому иногда оно равно 29.2 и после тренировки снова меняется на 30.5 или другое число.

def test_by_name(self):
    post_data = {
        'name': 'Andre'
    }
    resp = self.app.post('/survivals',
                         data=json.dumps(post_data),
                         content_type='application/json')
    self.assertEqual(resp.status_code, 200)
    self.assertEqual(resp.content_type, 'application/json')

    content = json.loads(resp.get_data(as_text=True))
    size = len(content['Passengers'])
    self.assertEqual(size, 2)

    self.maxDiff = None 

    expected = {
"Passengers": [
    {
        "SibSp": 1,
        "Sex": "0",
        "PassengerId": 925,
        "Survived": 1,
        "Parch": 2,
        "Age": 1,
        "Name": "Johnston, Mrs. Andrew G (Elizabeth Lily\" Watson)\"",
        "ChangeToSurvive": 74.7,
        "Embarked": "0"
    },
    {
        "SibSp": 0,
        "Sex": "1",
        "PassengerId": 1096,
        "Survived": 0,
        "Parch": 0,
        "Age": 1,
        "Name": "Andrew, Mr. Frank Thomas",
        "ChangeToSurvive": 29.2,
        "Embarked": "0"
    }
]
}
    self.assertEqual(content, expected)   # each train in a model the ChangeToSurvive can a little diferrent

1 Ответ

0 голосов
/ 20 мая 2018

unittest имеет assertAlmostEqual метод для этой цели:

actual_value = # extract float value from content
expected_value = # extract float value from expected
delta = 1.7
self.assertAlmostEqual(actual_value, expected_value, delta = delta)

И вам нужно повторить это для всех значений из ваших словарей, которые вы хотитепроверять.Лучше всего обернуть это методом тестовой утилиты.

...