Ich habe eine abstrakte Fabrik wie diese.Verspotten Rückgabewerte einer konkreten Klassenmethode mit Moq
public abstract class AbstractFactory
{
public abstract ISyncService GetSyncService(EntityType entityType);
}
Und ich habe seine konkrete Implementierung so.
public class SyncFactory : AbstractFactory
{
private readonly IOperatorRepository _operatorRepository;
public SyncFactory(IOperatorRepository operatorRepository)
{
_operatorRepository = operatorRepository;
}
public override ISyncService GetSyncService(EntityType entityType)
{
return new OperatorSyncService(_operatorRepository);
}
}
Diese Betonfabrik wird in einer solchen Methode aufgerufen.
public void MethodTobeTested()
{
var syncService =
new SyncFactory(_operatorRepository).GetSyncService(entityType);
}
Jetzt muss ich einen Komponententest für MethodTobeTested() schreiben.
Ich verspottete den Rückgabewert der GetSyncService() wie folgt. Aber es ruft den tatsächlichen OperatorSyncService auf, nicht den Schein. Ich brauche diesen Schein, um eine andere Methode im OperatorSyncService zu verspotten
private Mock<SyncFactory> _syncServiceMock;
_syncServiceMock = new Mock<SyncFactory>();
_syncServiceMock.Setup(m => m.GetSyncService(operator)).Returns(_operatorSyncServiceMock.Object);
Irgendeine Idee, wie man das löst?
Warum nicht einfach IoperatorRepository abspotten und die Methode aufrufen – ChrisBint
'MethodToBeTested' ist eng an' SyncFactory' gekoppelt, weil die Methode manuell eine neue Instanz von 'SyncFactory' erstellt. Dies macht es sehr schwierig, die Abhängigkeit zu verspotten. – Nkosi