Tôi có một ITransaction giao diện như sau:thành viên C# Mocking Giao diện của một lớp bê tông với Moq
public interface ITransaction {
DateTime EntryTime { get; }
DateTime ExitTime { get; }
}
và tôi có một lớp PaymentTransaction có nguồn gốc như sau:
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
}
tôi muốn Mock tất cả ba thuộc tính của đối tượng PaymentTransaction.
Tôi đã thử những điều sau đây, nhưng nó không làm việc:
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);
nhưng khi tôi tiêm
(mockedTxn.Object như PaymentTransaction)
trong phương pháp Tôi đang thử nghiệm (vì nó chỉ mất một PaymentTransaction và không ITransaction, tôi không thể thay đổi nó hoặc là) trình gỡ lỗi cho thấy tham chiếu null cho thời gian nhập cảnh và thời gian xuất cảnh.
Tôi đã tự hỏi liệu có ai đó có thể giúp tôi không.
Cảm ơn bạn đã dự đoán.
Tôi hiểu rằng tôi đang chế nhạo một lớp cụ thể, nhưng thực tế là đạo cụ thời gian nhập cảnh và xuất cảnh là các thành viên giao diện và tôi đang đúc đối tượng được chế tạo cụ thể của mình vào giao diện, tôi không cần phải thực hiện các đạo cụ ảo này. Tôi đã tự hỏi liệu có cách nào khác để làm điều này không. – Raghu
vì vậy bạn có tìm thấy câu trả lời cuối cùng không? Bạn đã làm nó như thế nào? –