RhinoMock: метод-заглушка не возвращает ожидаемое значениеC#

Место общения программистов C#
Ответить
Anonymous
 RhinoMock: метод-заглушка не возвращает ожидаемое значение

Сообщение Anonymous »

Я использую Visual Studio 2019, платформу 4.7.2 и RhinoMock для модульного тестирования.
Интерфейс не может иметь виртуальный метод в этой среде.
Проблема: я использую метод 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();
[TestFixtureSetUp]

Код: Выделить всё

    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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»