Интерфейс не может иметь виртуальный метод в этой среде.
Проблема: я использую метод MessageBox.Show() внутри одного из методов пользовательского класса, который хочу протестировать. Мне нужно обернуть класс MessageBox и метод-заглушку Show. Но заглушенный метод не возвращает ожидаемое значение, он возвращает None. Ниже приведены классы
Класс-оболочка
публичный класс MessagePrompt: IMessagePrompt
{
Код: Выделить всё
public virtual DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon)
=> MessageBox.Show(owner, text, caption, buttons, icon);
}
public interface IMessagePrompt
{
DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon);
}
Фактический класс
публичный частичный класс SurrDetail
{
Код: Выделить всё
public IMessagePrompt messagePrompt;
public SurrDetail(IMessagePrompt messagePrompt)
{
InitializeComponent();
this.messagePrompt = messagePrompt;
}
public void Reject()
{
if (messagePrompt.Show(this, "Are you sure", "Reject", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
.......
}
}
[TestFixture]
Код: Выделить всё
public class SurrDetailTest
{
#region Locals
private SurrDetail surrDetail;
IMessagePrompt messagePrompt= MockRepository.GenerateMock();
Код: Выделить всё
public void SetUp()
{
messagePrompt.Stub(m => m.Show(surrDetail, "test", "test", MessageBoxButtons.YesNo, MessageBoxIcon.Question)).Return(DialogResult.Yes);
surrDetail = new SurrDetail(messagePrompt);
}
Код: Выделить всё
public void Reject_Test()
{
Reject();
}
messagePrompt.Show(this, «Вы уверены», «Отклонить», MessageBoxButtons.ДаНет, MessageBoxIcon.Question), показывающее «Нет» ' и, следовательно, управление не происходит внутри блока if.
Однако messagePrompt - это прокси-вызов во время выполнения.
Подробнее здесь: https://stackoverflow.com/questions/793 ... cted-value
Мобильная версия