Python单元测试assertEqual在一台机器中抛出assertionError,但在其他机器中不抛出

2024-06-28 11:21:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经为GraphQL突变构建了一个测试用例,我将graphene.Decimal()类型的输入(priceOne和priceTwo)保存到models.DecimalField类型的model MyObj字段中,并在响应中返回MyObj

下面的代码返回OK,在我的机器上测试成功,让我们调用机器A,它也在机器B上工作,但在机器C上不工作

  • 机器A:Windows 10、python 3.7=>;嗯
  • 机器B:Ubuntu,python 3.8.0=>;嗯
  • 机器C:Ubuntu,python 3.8.5=>;F

石墨烯-GraphQL

graphene==2.1.8
graphene-django==2.13.0
graphql-core==2.3.2
graphql-relay==2.0.1
import json

from graphene_django.utils import GraphQLTestCase
from mixer.backend.django import mixer

from core.schema import schema
from my_app.models import MyObj


MY_MUTATION = '''
    mutation MyMutation($input: MyInput!) {
        myMutation(input: $input) {
            success
            myObj {
                id
                price
            }
        }
    }
'''


class TestMyMutation(GraphQLTestCase):
    GRAPHQL_SCHEMA = schema

    def setUp(self):
        self.my_obj = mixer.blend(MyObj)

        self.input_data = {
            'id': self.my_obj.id,
            'priceOne': '2000.00',
            'priceTwo': '0.10',
        }

    def test_my_mutation_success(self):

        response = self.query(MY_MUTATION, input_data=self.input_data)
        content = json.loads(response.content)

        self.assertResponseNoErrors(response)
        self.assertTrue(content['data']['myMutation']['success'])
        self.assertEqual(content['data']['myMutation']['myObj']['priceOne'], 2000.00)
        self.assertEqual(content['data']['myMutation']['myObj']['priceTwo'], 0.10)


在机器C上,左参数为字符串:

self.assertEqual(content['data']['myMutation']['myObj']['priceTwo'], 0.10) AssertionError: '0.10'!= 0.1

但在机器A上,它是浮动的:

print(type(content['data']['myMutation']['myObj']['priceOne'])) <class 'float'>

我们通过将assertEqual的两个参数都转换为Decimal并将“”添加到右侧的参数中,解决了这个问题。加上一个0.10检查的量化左参数

self.assertEqual(Decimal(content['data']['myMutation']['myObj']['priceOne']), Decimal('2000.00'))
self.assertEqual(Decimal(content['data']['myMutation']['myObj']['priceTwo']).quantize(Decimal(10)**(-2)), Decimal('0.10'))

问题: 为什么第一个选项不适用于机器C,但适用于其他两个


Tags: fromimportself机器inputdatacontentgraphene