Как я могу макетировать экземпляр моей основной формы Winform, чтобы протестировать некоторые методы? - PullRequest
0 голосов
/ 20 декабря 2010

Я использую Moq (который я тоже очень новый, а также период TDD).И я хотел, чтобы Moq создал экземпляр моей основной формы Winforms, чтобы я мог протестировать несколько методов там.Это возможно?Его конструктор принимает объект Assembly ().

Я пробовал следующие попытки безуспешно:

var mockMainForm = new Mock<MainForm>();
mockMainForm.Setup(x => x.Assembler).Returns(new Assembly());
return mockMainForm.Object;

Но я не могу получить доступ ни к каким свойствам или методам этого объекта один разэто возвращается.Возможно ли это сделать?

Но я получаю ошибки, которые (ошибка: System.ArgumentException: выражение не является вызовом метода: x => x.Assembler в Moq.ExpressionExtensions.ToMethodCall (выражение LambdaExpression)) * +1010 *

Ответы [ 2 ]

2 голосов
/ 21 декабря 2010

Mocking с использованием Moq будет только издеваться над интерфейсами и виртуальными методами класса.Свойство Assembler должно быть определено как virtual.

В любом случае Насмешка над формой Windows не является хорошей насмешкой - в ней есть большой пакет вещей WIN32, которые делают ваши тесты хрупкими.Если вам нужно выполнить модульное тестирование и смоделировать форму, создайте интерфейс, который необходимо реализовать в вашей форме, и смоделируйте его для объектов, которые должны взаимодействовать с вашей формой.

public interface IHasAssembler
{
    Foo Assembler {get; set;}
}

public class MyForm : IHasAssembler
{
     //
}

, а затем смоделируйте интерфейс, а не форму:

Mock<IHasAssembler> myMock = new Mock<IHasAssembler>();
0 голосов
/ 20 декабря 2010

Я никогда не использовал (или даже не слышал) о Moq, но я собираюсь догадаться, что mockMainForm.Object имеет тип Form, и что вы можете разыграть, чтобы получить его:

object moqObject = MakeMoqOfMyMainForm();
Form mainForm = (Form)moqObject;

(Если я ошибаюсь, дайте мне знать, и я удалю этот ответ)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...