я следующий защищенный метод в моем базовом классе:Дразнящий защищенный метод всегда возвращает истину
protected bool ExecuteInteraction(string identifier,
Action<object> interactionFinished, params object[] args)
{
Contract.Requires(!string.IsNullOrEmpty(identifier));
Contract.Requires(interactionFinished != null);
bool result = false;
if (!string.IsNullOrEmpty(identifier) && (interactionFinished != null))
{
// Find the matching interaction behavior.
IInteractionBehavior interactionBehavior =
InteractionBehaviorCollection.Instance.Get(identifier);
if (interactionBehavior != null)
{
try
{
interactionBehavior.Execute(interactionFinished, args);
result = true;
}
catch (Exception)
{
}
}
else
{
Debug.WriteLine(string.Format(
"InteractionBehavior with identifier [{0}] is unknown",
identifier));
}
}
return result;
}
Это в основном из этой статьи: http://www.codeproject.com/Articles/708346/Dialogs-the-MVVM-Way ...
Этот метод используется в моем производном классе как то:
protected override void Delete()
{
try
{
if (PrimaryModel.Id != 0 && PrimaryModel.AddressId != 0)
{
ExecuteInteraction("DeleteConfirmation", (result) =>
{
MessageBoxResult messageBoxResult = (MessageBoxResult)result;
if (messageBoxResult == MessageBoxResult.Yes)
{
//Do something ...
}
});
}
}
catch (Exception exc)
{
Message = exc.Message;
}
}
Это не работает в моем тестовом модуле, потому что я не имитировать, что messageBoxResult является MessageBoxResult.Yes. Именно по этой причине я бы хотел, чтобы мой защищенный метод всегда возвращался к истине в модульном тесте. Как я могу это сделать (с moq)?
Вы абсолютно правы, и я понял. Издеваться над интерфейсом не проблема. Меня смущает ExecuteInteraction («DeleteConfirmation», (result) => {... Я не знаю, что делать, чтобы мой результат всегда был правдой. Я не уверен, что именно издеваться над моим кодом (я не знаю, у вас есть какая-либо ShowMessageBox-логика или что-то в этом роде.) – mosquito87
Это ваша проблема ... вам нужно удалить все ссылки на «MessageBox» и «MessageBoxResult» и т. д. из вашего кода и заменить их на вызовы на новый «WindowManager» или аналогичный класс, тогда этот код будет работать так же, когда вы тестируете или когда будете жить. Разница в том, что при тестировании вы используете класс 'MockWindowManager', который автоматически возвращает' Yes', а не ждет, когда пользователь нажмет что-нибудь. – Sheridan
Я следил за вашими рекомендациями, и теперь он отлично работает. Спасибо! – mosquito87