Wie moq eine statische Klasse mit einer statischen Methode (UnitOfWork Fall)?
Habe ich diese Klassen:
public static class UnitOfWorkSS
{
public static IUnitOfWork Begin()
{
return IoC.Resolve<IUnitOfWork>();
}
}
public class PostService
{
using (IUnitOfWork unitOfWork = UnitOfWorkSS.Begin())
{
//don't forget to sanitize html content
htmlContent = _htmlSanitizer.Sanitize(htmlContent);
IPost post = _factory.CreatePost(byUser, title, htmlContent);
_postRepository.Add(post);
unitOfWork.Commit();
}
}
Wie kann ich verspotte die Klassen UnitOfWorkSS
und unitOfWork
?
InformationsquelleAutor der Frage Attilah | 2010-11-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht es aus wie das einzige, was Sie tun, mit dem Aufruf von Begin() wird die Rücksendung Ihrer Klasse konfiguriert für die jeweilige Schnittstelle:
IUnitOfWork
Sie wirklich brauchen nur, um sicherzustellen, dass Ihr Aufruf von Begin() liefert ein mock-Implementierung von
IUnitOfWork
Einer von zwei Möglichkeiten, wie Sie dies tun können:
Option Einer - Umgestalten
UnitOfWorkSS
so dass Sie die Instanz derIUnitOfWork
zurückgegeben werdenOption Zwei - Einfach registrieren, eine mock-Instanz
IUnitOfWork
mit Ihrem IoC-ContainerInformationsquelleAutor der Antwort Josh
Mock die IUnitOfWork und registrieren Sie Sie in Ihrem container, so dass es gelöst werden kann.
InformationsquelleAutor der Antwort Phill
Soweit ich weiß, kann man nicht verspotten statische Klassen oder Methoden.
InformationsquelleAutor der Antwort Chris
Ich weiß, dies ist eine sehr alte Frage, aber falls jemand hier landet...
Die beste Lösung ist eine design-änderung, wie die anderen Antworten sagen. Allerdings, wenn das nicht möglich ist, können Sie entweder Microsoft Fakes (ersetzt Maulwürfe) oder, wenn Sie lieber nicht davon abhängen, Visual Studio, es gibt eine Bibliothek namens Kitteln, die helfen können.
https://github.com/vanderkleij/Smocks
InformationsquelleAutor der Antwort Bogdan Galiceanu