У меня есть интерфейс ITransaction следующим образом:
public interface ITransaction {
DateTime EntryTime { get; }
DateTime ExitTime { get; }
}
и у меня есть производный класс PaymentTransaction следующим образом:
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
}
Я хотел Дразнить все три свойства Объекта PaymentTransaction.
Я попробовал следующее, но это не работает:
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);
но когда я ввожу
(mockedTxn. Объект как PaymentTransaction)
в методе я тестирую (как это, только берет PaymentTransaction и не ITransaction, я не могу изменить его ни один), отладчик показывает нулевую ссылку в течение времени записи и времени выхода.
Я задавался вопросом, мог ли кто-то помочь мне.
Спасибо в ожидании.
Единственные способы, которыми я смог обойти этот вопрос (и это похоже на взлом в любом случае) - это либо делать то, что вы не хотите делать, и сделать свойства на Бетонный класс виртуальный (даже для реализации интерфейса) или, также для явного реализации интерфейса на вашем классе. Например:
public DateTime EntryTime
{
get { return ((ITransaction)this).EntryTime; }
}
DateTime ITransaction.EntryTime
{
get { throw new NotImplementedException(); }
}
затем, когда вы создаете свой издевательства, вы можете использовать как
синтаксис, и их будет вести себя ведут, как вы ожидаете.
Убедитесь, что при компиляции использовался параметр -g.
-121--2887361-Это работает для меня -
public partial class MyEntity: IEntity
{ [Column(Name = "IDfield", Storage = "_IDfield", IsDbGenerated = true)]
public int ID
{
get { return this.IDfield; }
set { this.IDfield=value; }
}
}
-121--3367986- Вы издеваетесь над конкретным классом, поэтому, я думаю, вы сможете издеваться только над виртуальными членами (они должны быть переопределяемыми).