Ich habe eine PresenterFactory, die Presenter-Klassen basierend auf einem Role-Parameter erstellt. Insbesondere ist die Rolle Parameter eine externe Klasse, die ich nicht kontrollieren kannKorrekte Anwendung von Mock-Objekten in Unit Testing
Meine Fabrik sieht ungefähr so aus (IE 3rd-Party.):
public class PresenterFactory {
public Presenter CreatePresenter(Role role, ...) {
if (role.IsUserA("Manager")) {
return new ManagerPresenter(...)
}
if (role.IsUserA("Employee")) {
return new EmployeePresenter(...)
}
}
}
Ich bin fest, wie das Gerät zu testen für diese schreiben seit dem Erstellen des Objekts Role
erzwingt einen Datenbankzugriff. Ich dachte, ich könnte dieses Objekt verspotten. Mein Test sah wie folgt aus:
public void TestPresenterFactory()
{
var mockRole = new Mock<Role>();
mockRole .Setup(role=> role.IsUserA("Manager"))
.Returns(true)
.AtMostOnce();
PresenterFactory.CreatePresenter(mockRole.Object, ...);
mockUserInfo.VerifyAll();
}
aber ich erhalte eine ArguementException
:
Ungültige Setup auf einem Nicht-overridable Mitglied: role => role.IsUserA ("Manager")
Ich bin mir nicht sicher, wo ich hingehen soll und kann sicher eine Kurskorrektur verwenden. Was mache ich falsch?
Das ist, was ich versuchte, verwenden können, bekam aber ein * Ungültiges Setup für ein nicht überschreibbares Mitglied * Ausnahme –
In diesem Fall empfehle ich Womps Antwort, eine Wrapper-Klasse um das Role-Objekt zu schreiben. –