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

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

Сообщение Anonymous »

Я использую Visual Studio 2019, платформу 4.7.2 и RhinoMock для модульного тестирования.
В этой платформе интерфейс не может иметь виртуальный метод.
Проблема: я использую метод MessageBox.Show() внутри одного из методов пользовательского класса, который хочу протестировать. Мне нужно обернуть класс MessageBox и метод-заглушку Show. Но заглушенный метод не возвращает ожидаемое значение, он возвращает None. Ниже приведены классы
Класс-оболочка

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

public class 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);
}
Фактический класс

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

public partial class 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);
}

[Test]
public void Reject_Test()
{
Reject();
}
}
messagePrompt.Show(this, «Вы уверены», «Отклонить», MessageBoxButtons.ДаНет, MessageBoxIcon.Question) показывает «Нет» и, следовательно, управление не поступает внутрь, если блокируется.Однако messagePrompt — это прокси-вызов во время выполнения.


Подробнее здесь: https://stackoverflow.com/questions/793 ... cted-value
Ответить

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

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

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

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

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