TDD и MVC 3, тестовые модели - PullRequest
       4

TDD и MVC 3, тестовые модели

2 голосов
/ 31 декабря 2011

Я пытаюсь научиться юнит-тестированию и работе с MVC 3, и я застреваю в проблеме «Как проверить две модели». Вот код

public class HomeController : Controller
{
    private IRepository _repository;

    public  HomeController(IRepository repository)
    {
        _repository = repository;
    }

    //
    // GET: /Home/

    public ActionResult Index()
    {
        return View(_repository.GetAllGenres());
    }    
}

public interface IRepository
{
    IEnumerable<Genre> GetAllGenres();
    IEnumerable<Album> GetTopAlbums(int count);
}

и предположим, что это мой юнит-тест

[TestFixture]
class HomeControllerTests
{
    [Test]
    public  void Test1()
    {                
        //Arrange
        var controller = new HomeController(new InMemoryRepository());
        var result = (ViewResult) controller.Index();

        Assert.AreEqual(10,((IEnumerable<Genre>)result.ViewData.Model).Count());
    }

    [Test]
    public  void Test2()
    {
        var controller = new HomeController(new InMemoryRepository());
        var result = (ViewResult) controller.Index();
        //I Want to be able to do something like this
        Assert.AreEqual(5,result.ViewData.Model.GetTopAlbums(5).Count);
    }
}

Теперь мой вопрос: как именно я делаю что-то вроде того, что я хочу работать. Или я создаю метод ChildActionOnly, который отвечает за возврат лучших альбомов.

Ответы [ 2 ]

2 голосов
/ 31 декабря 2011

Рассматривали ли вы использование насмешливого фреймворка для помощи в тестировании? Например, вы можете использовать mock для вашего вызова GetTopAlbums. Я предпочитаю moq , но есть несколько отличных фреймворков на выбор.

Обратите внимание, это довольно простой пример, но вы можете легко создать помощника по тестированию для создания списка с ожидаемым количеством альбомов:

[Test]
public void Index_Get_Should_Lookup_Top_Albums_And_Return_Index_View()
{
    // arrange
    var expectModel = new List<Album>
                            {
                                new Album{Artist= "joe", Tracks = 16},
                                new Album{Artist= "doe", Tracks = 23},
                            };

    _repository.Setup(x => x.GetTopContacts(It.IsAny<int>())).Returns(expectModel);

    var controller = new HomeController(_repository.Object);

    // act
    var result = controller.TopContacts();
    var model = result.ViewData.Model as IEnumerable<Album>;

    // assert
    Assert.AreEqual(2, model.Count());
}
0 голосов
/ 01 января 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...