【问题标题】:UUID fails unit pytest due to formatting?由于格式化,UUID 单元 pytest 失败?
【发布时间】:2022-01-18 02:07:34
【问题描述】:

我在我的序列化器中返回用户的 UUID,这工作正常。然而,当编写一个单元测试来测试这个返回时,尽管它们被以相同的方式调用,但测试还是失败了。下面是我的代码的简化版本。

我的 serializers.py:

class UserSerializer(serializers.ModelSerializer):
    user_sso = serializers.SerializerMethodField("get_user_sso")

    class Meta:
        model = get_user_model()
        fields = (
            "user_sso",
        )

    def get_user_sso(self, user):
        return user.profile.sso_id

我在 test_views.py 中的单元测试

class TestUserAPIView(BaseAPIViewTest):
    factory = factories.UserFactory

    def expected_response(self, user):
        return {
            "user_sso": user.profile.sso_id,
        }

失败的测试消息(工厂生成的用户是最上面的):

E         -   'user_sso': UUID('f696d740-bdd5-43a3-8f58-406b7a1e117d')},
E         ?               -----                                      -
E         +   'user_sso': 'f696d740-bdd5-43a3-8f58-406b7a1e117d'},

如何让这个测试通过?

我在当前输出的开头没有“UUID(”这个词,这看起来是个问题,但我不确定如何在没有所有内容的情况下删除它?非常感谢。

【问题讨论】:

    标签: python django unit-testing


    【解决方案1】:

    请以str(…) 的结果作为响应,否则将使用UUID 本身,所以:

    class UserSerializer(serializers.ModelSerializer):
        user_sso = serializers.SerializerMethodField("get_user_sso")
        
        # …
        
        def get_user_sso(self, user):
            return str(user.profile.sso_id)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-03
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-27
      相关资源
      最近更新 更多