Я могу придумать два пути:
Метод 1. Создайте фабрику и передайте ее Account
, когда вы ее создадите. Если вам нужен SavingAccount, позвоните на фабрику:
public class Account
{
private readonly IAccountFactory _accountFactory;
public Account(IAccountFactory accountFactory)
{
_accountFactory = accountFactory;
}
public void GetAccountDetails()
{
SavingAccount savingAccount = _accountFactory.CreateSavingAccount();
savingAccount.Data();
//Some logic
}
}
Затем вы можете передать имитированную реализацию IAccountFactory
в Account
. Я рекомендую это сделать, и в будущем вам будет проще перейти к внедрению зависимостей, если вы когда-нибудь решите это сделать.
Метод 2. Перемещение экземпляра SavingAccount в макетный метод:
public class Account
{
public void GetAccountDetails()
{
SavingAccount savingAccount = CreateSavingAccount();
savingAccount.Data();
//Some logic
}
protected virtual SavingAccount CreateSavingAccount()
{
return new SavingAccount();
}
}
Теперь вы можете смоделировать CreateSavingAccount
и заставить его вернуть имитированный экземпляр SavingAccount
. Обратите внимание, что вам также нужно изменить public void Data()
на public virtual void Data()
, чтобы вы могли его высмеять.