How to pass, Django mock-Instanz die Methode der Klasse?

Mock-Bibliothek zum testen ist das eine Django-Thema, ich kann einfach nicht scheinen zu wickeln meinem Kopf herum. Zum Beispiel in dem folgenden code, warum nicht die mock-User-Instanzen, erstelle ich in meinem unit-test erscheint in der User-Objekt, das ich Abfrage in der "get_user_ids' - Methode? Wenn ich halt den test in der 'get_user_ids' Methode, die über die debug-Aufruf und die "User.Objekte.alle()", es gibt nichts in der Benutzer-queryset und der test schlägt fehl. Bin ich nicht die Schaffung von drei mock-User-Instanzen, wird abgefragt, die die UserProxy-statische Methode?

Bin ich mit Django 1.6 und Postgres 9.3 und läuft der test mit dem Befehl "python manage.py test -s-apps.Profil.tests.model_tests:TestUserProxy".

Dank!

# apps/profile/models.py
from django.contrib.auth.models import User
class UserProxy(User):
    class Meta:
        proxy = True

    @staticmethod
    def get_user_ids(usernames):
        debug()
        user_ids = []
        for name in usernames:
            try:
                u = User.objects.get(username__exact=name)
                user_ids.append(u.id)
            except ObjectDoesNotExist:
                logger.error("We were unable to find '%s' in a list of usernames." % name)
        return user_ids


# apps/profile/tests/model_tests.py
from django.test import TestCase
from django.contrib.auth.models import User
from mock import Mock
from apps.profile.models import UserProxy

class TestUserProxy(TestCase):
    def test_get_user_ids(self):
        u1 = Mock(spec=User)
        u1.id = 1
        u1.username = 'user1'

        u2 = Mock(spec=User)
        u2.id = 2
        u2.username = 'user2'

        u3 = Mock(spec=User)
        u3.id = 3
        u3.username = 'user3'

        usernames = [u1.username, u2.username, u3.username]
        expected = [u1.id, u2.id, u3.id]
        actual = UserProxy.get_user_ids(usernames)
        self.assertEqual(expected, actual)
  • Ich Las deine Frage noch einmal und Ihre Kommentare zu dem anderen Beitrag. Sie wollen eine echte user und nicht verhöhnt: Sie brauchen, um das Reale Objekt durch User() wie in docs.djangoproject.com/en/1.7/intro/tutorial05/... . Mock() werden verspottet und nicht wrapers. Sollten Sie Ihre Frage klar zu sein... Zwei so missverstanden haben, was Sie wollen...
InformationsquelleAutor Ray | 2015-01-07
Schreibe einen Kommentar