Контроллер модульного тестирования Asp.Net MVC2: Запрос ["Выбор"] - PullRequest
1 голос
/ 11 мая 2011

Я новичок в модульном тестировании и пытаюсь изучить TDD, но не могу понять, как это проверить.Я уже потратил на это два дня (не волнуйтесь, это не для работодателя, поэтому, пожалуйста, без умных ответов).

Я написал контроллер, который хочу протестировать, мне нужно присвоить значение "Выбор".Упрощенно это выглядит так:

    public ActionResult Index()
    {
          string s = Request["Choice"];
          return View(new MyList.GetList(s));
    }

Как мне присвоить значение «Выбор» в тесте или можно?В приложении значение «Выбор» назначается с помощью радиокнопки в форме в виде страницы.Это мой тест в psuedocode:

    [TestMethod()]
    public void IndexTest()
    {
          CategoryController target = new CategoryController();
          var result = target.Index() as ViewResult;
          MyList actual = result.ViewData.Model as MyList;

          // etc ...

          Assert.AreEqual(expected.List, actual.List);
    }

Спасибо, Марио

Ответы [ 3 ]

4 голосов
/ 11 мая 2011

Я почти уверен, что вы можете просто принять выбор в качестве параметра для вашего метода действия.Тогда никакие махинации не нужны:

public ActionResult Index(string choice)
{
      return View(new MyList.GetList(choice));
}

Это не сработало бы, если бы выбор исходил из файла cookie или серверной переменной, но я предполагаю, что вы ожидаете его либо из строки запроса, либо из сообщения формы.

1 голос
/ 11 мая 2011

Как уже отмечалось, строго типизированные методы действий здесь ваши друзья, используйте их.

Но если вам нужно много раздувать и подделывать HTTP-компоненты, вам следует проверить MvcContrib TestHelpers ;они помогут вам протестировать многие из этих вещей.

1 голос
/ 11 мая 2011

Как правило, вы не хотите проверять, что Запрос работает должным образом.

Запрос - это то, что вы не разработали, поэтому вы можете исключить его из теста, поместив его в оболочку.

Пример:

public ActionResult Index()
{
    string s = GetChoice();
    return View(new MyList.GetList(s));
}

public virtual string GetChoice()
{
    return Request["Choice"];
}

, а затем вы можете подделать метод GetChoice в своем модульном тесте.

Ваш тест может выглядеть следующим образом:

public void Index_WhenCalled_ReturnsMyListFromChoice()
{
    var fake = MockRepository.GenerateStub<SomeController>();
    fake.Expect(x => x.GetChoice()).Return("some fake choice");

    var returnedView = fake.Index();

    Assert(/*assert something here */);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...