Re[7]: Mock
От: Time Россия  
Дата: 23.09.08 15:03
Оценка:
Здравствуйте, 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>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.