Фактически, когда я создаю новый модульный тест с помощью мастера, он приходит с этим
Да, и все, что вы можете сохранить от этого, - это сигнатура метода.Тело метода бесполезно.
Итак, начнем с рассмотрения этого:
Возможно ли передать target.PaypalIPN () мои переменные Request.Form
Читая это предложение, я предполагаю, что действие вашего контроллера выглядит примерно так:
[HttpPost]
public ActionResult PaypalIPN()
{
string foo = Request["foo"];
string bar = Request["bar"];
... do something with foo and bar
}
Итак, первое - улучшить этот код, введя модели представления:
public class MyViewModel
{
public string Foo { get; set; }
public string Bar { get; set; }
}
изатем измените сигнатуру вашего метода следующим образом:
[HttpPost]
public ActionResult PaypalIPN(MyViewModel model)
{
... do something with model.Foo and model.Bar
}
Теперь ваш контроллер отделен от любого кода инфраструктуры HttpContext (который действительно должен быть оставлен за рамками, действия вашего контроллера не являются обязанностью читать параметры запроса =>это очень простой вопрос:
[TestMethod()]
public void PaypalIPNTest()
{
// arrange
var sut = new BuyController();
var model = new MyViewModel
{
Foo = "some foo",
Bar = "some bar",
};
// act
var actual = sut.PaypalIPN(model);
// assert
// TODO:
}
ОК, как говорится, здесь мы имеем дело с очень простым действием контроллера.Для более сложных сценариев вы действительно должны рассмотреть возможность использования фреймворка.Лично я использую MvcContrib.TestHelper с Rhino Mocks для модульного тестирования моих приложений ASP.NET MVC.