Здравствуйте, Flea, Вы писали:
F>Здравствуйте, Time, Вы писали:
F>Я тогда лучше свой пример приведу.
F>Есть такие классы:
F>F>public class Controller
F>{
F> ...
F> public bool IsTrue()
F> {
F> bool istrue = true;
F> ...
F> if (Condition)
F> {
F> using (TheForm form = new TheForm())
F> {
F> form.ShowDialog(null, arg);
F> }
F> }
F> return istrue;
F> }
F>}
F>public class TheForm : Form
F>{
F> public DialogResult ShowDialog(IWin32Window owner, MyType arg)
F> {
F> ...
F> return this.ShowDialog(owner);
F> }
F>}
F>
F>Для этой функции надо написать тест так, чтоб вместо того, чтоб вызывать ShowDialog, просто возвращался DialogResult.
F>Пробую такой код:
F>F> [Test]
F> public void Controller_IsTrue()
F> {
F> Controller cont = new Controller();
F> ...
F> TheForm form = mocker.DynamicMock<TheForm>();
F> Expect.Call(form.ShowDialog(null, null)).Return(DialogResult.OK);
F> LastCall.IgnoreArguments();
F> mocker.ReplayAll();
F> bool res = cont.IsTrue();
F> Assert.IsFalse(res);
F> }
F>
F>При этом ShowDialog вызывается и форма появляется. Если ее закрыть, тест проходит
F>Вроде бы по смыслу все, как в первом примере...
F>PS: используется Rhino mock
Всё дело в том что Вы пытаетесь поделать реализацию, вместо интерфейса.
здесь. Для Вашего примера надо сделать так (обратите внимание на выделенное жирным):
F>F>public class Controller
F>{
F> ...
F> public bool IsTrue()
F> {
F> bool istrue = true;
F> ...
F> if (Condition)
F> {
F> using (ITheForm form = new TheForm())
F> {
F> form.ShowDialog(null, arg);
F> }
F> }
F> return istrue;
F> }
F>}
public interface ITheForm
{
DialogResult ShowDialog(IWin32Window owner, MyType arg);
}
F>public class TheForm : Form, ITheForm
F>{
F> public DialogResult ShowDialog(IWin32Window owner, MyType arg)
F> {
F> ...
F> return this.ShowDialog(owner);
F> }
F>}
F>
F>Для этой функции надо написать тест так, чтоб вместо того, чтоб вызывать ShowDialog, просто возвращался DialogResult.
F>Пробую такой код:
F>F> [Test]
F> public void Controller_IsTrue()
F> {
F> Controller cont = new Controller();
F> ...
F> ITheForm form = mocker.CreateMock<ITheForm>();
F> Expect.Call(form.ShowDialog(null, null)).IgnoreArguments.Return(DialogResult.OK);
F> LastCall.IgnoreArguments();
F> mocker.ReplayAll();
F> bool res = cont.IsTrue();
F> Assert.IsFalse(res);
mocker.VerifyAll();
F> }
F>
... << RSDN@Home 1 alpha 4 rev. 0>>