Frage

Ich bin neu bei Pex und Moles.Ich versuche, Pex für meinen Code auszuführen, verwende jedoch die Konstruktorinjektion.Gibt es eine Möglichkeit, Pex anzuweisen, wie die Konstruktoren injiziert werden sollen?

Bearbeiten

    public UserLogic(IUserRepository userRepository)
    {
        _userRepository = userRepository;
    }

    public int GetUsersAge(int id)
    {
        User user = _userRepository.GetById(id);
        DateTime DOB = user.DOB;
        DateTime now = DateTime.Today;
        int age = now.Year - DOB.Year;
        if (DOB > now.AddYears(-age)) age--;
        return age;
    }

Ich muss ein Stub userRepository injizieren.Pex schlägt mit einer NullReferenceException fehl, wenn _userRepository.GetById (id) aufgerufen wird.Ich habe Moq für meine Unit-Tests verwendet, möchte aber auf Pex und Moles umsteigen

Soll ich PexFactories verwenden, um meine Stubs zu erstellen?

War es hilfreich?

Lösung

Versuchen Sie, einen Moles-Stub-Typ an einen von Pex generierten parametrisierten Test zu übergeben. Um einen parametrisierten Test zu erstellen, klicken Sie mit der rechten Maustaste auf die Klasse, die Sie untersuchen möchten, und wählen Sie dann PEX> Parametrisierten Komponententest erstellen aus. Dies generiert eine Methode in der Testklasse, die Argumente enthält. Die einzelnen Tests rufen diesen parametrisierten Test auf und senden die einzelnen Testargumente.

Wenn der zu testende Code die Abhängigkeitsinjektion über Argumente verwendet (er hat ein Argument vom Typ Schnittstelle), enthält die von Pex generierte parametrisierte Testmethode auch dasselbe Argument vom Typ Schnittstelle. Sie können Ihre eigenen Testmethoden schreiben, die auch die parametrisierte Methode aufrufen, und Ihre eigenen Werte, einschließlich des Schnittstellentyps, eingeben. Stellen Sie nur sicher, dass Sie sie nicht in die von Pex generierte Datei schreiben!

Ich schlage auch vor, die Verwendung von Mole Stub-Typen für Ihre Unit-Test-Injektionen in Betracht zu ziehen. Das Microsoft Moles-Referenzhandbuch ist ein sehr guter Ort, um mit dem Lernen zu beginnen über die Verwendung von Maulwürfen in Unit-Tests. Beim Erstellen des parametrisierten Tests wird ein Mol-Stub-Typ für Ihre Schnittstelle erstellt. Konfigurieren Sie einfach die Umwege für Ihren Stub-Typ und übergeben Sie sie dann an den parametrisierten Test.

Das Erstellen von Umwegen vom Stub-Typ ist sehr einfach. Ich schlage vor, im Testprojekt eine Konfigurationsmethode zu erstellen, die häufig verwendete Umwege konfiguriert. Normalerweise füge ich dieser Methode ein Aufzählungsflag als Argument hinzu, damit ich leicht erkennen kann, welche Umwege bei bestimmten Typen in einem Aufruf erstellt werden sollen.

Beispielaufzählung:

[Flags()]
public enum MoleConfigurations
{
    MoleSqlClientObjects,
    DisableDirectory_Exists,
    DisableEventLogExtensions,
    DisableInitializeDatabaseObjects,
    DisableInitializeThreadingObjects,
    DisableQueueExistingDataFiles,
    DisableConstructor
}

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top