Ich habe eine Schnittstelle ITransaction wie folgt:C# Mocking Schnittstelle Mitglieder einer konkreten Klasse mit Moq
public interface ITransaction {
DateTime EntryTime { get; }
DateTime ExitTime { get; }
}
und ich habe eine abgeleitete Klasse PaymentTransaction wie folgt:
public class PaymentTransaction : ITransaction {
public virtual DateTime LastPaymentTime
{
get { return DateTime.Now; }
}
#region ITransaction Members
public DateTime EntryTime
{
get { throw new NotImplementedException(); }
}
public DateTime ExitTime
{
get { throw new NotImplementedException(); }
}
#endregion
}
Ich wollte alle Mock drei Eigenschaften des PaymentTransaction-Objekts.
Ich habe folgende versucht, aber es funktioniert nicht:
var mockedPayTxn = new Mock<PaymentTransaction>();
mockedPayTxn.SetUp(pt => pt.LastPaymentTime).Returns(DateTime.Now); // This works
var mockedTxn = mockedPayTxn.As<ITransaction>();
mockedTxn.SetUp(t => t.EntryTime).Returns(DateTime.Today);
mockedTxn.SetUp(t => t.ExitTime).Returns(DateTime.Today);
aber wenn ich einzuspritzen
(mockedTxn.Object als PaymentTransaction)
bei dem Verfahren I (wie es am Testen Nimmt nur eine PaymentTransaction und nicht ITransaction, ich kann es auch nicht ändern) der Debugger zeigt Null Referenz für Eintrittszeit und Austrittszeit.
Ich fragte mich, ob jemand mir bitte helfen könnte.
Vielen Dank im Voraus.
Ich verstehe, dass ich eine konkrete Klasse verspotten, aber angesichts der Tatsache, dass Einlass und Ausfahrt Requisiten sind die Schnittstelle Mitglieder und ich bin mein konkretes verspottetes Objekt zu Schnittstelle Gießen, ich sollte diese Requisiten nicht virtuell machen. Ich habe mich nur gefragt, ob es eine andere Möglichkeit gibt, dies zu tun. – Raghu
also hast du endlich die antwort gefunden? wie hast du es gemacht? –