Question

J'utilise MVC 2 avec contrib MVC et Rhino se moque.

Je suis dans le besoin d'aide. Il a été un week-end douloureux. Je suis en train de chercher des bons articles sur la façon de faire des tests sur les contrôleurs utilisant contrib MVC. Et personne n'a de réponses décentes pour moi. Je veux savoir ce que dois-je tester sur une vue et les contrôleurs? Est-ce l'unité ou l'essai d'intégration?

Permettez-moi de décrire mon scénario de base: J'ai une vue Index qui a une grille dessus. Dans cette grille, j'ai une liste d'éléments d'information. Dans cette grille, dans la dernière colonne de chaque ligne, est un lien Modifier amène l'utilisateur à la vue EditNews pour modifier l'élément de nouvelles sélectionné. Également sur ce point de vue Index est un bouton Ajouter Nouvelles qui amène l'utilisateur à la vue CreateNews.

Maintenant, étant donné le scénario actuel, quels tests dois-je écrire? Pourriez-vous les gars Veuillez indiquer également si elles sont des tests unitaires ou tests d'intégration. Ai-je besoin d'écrire un test pour le lien Modifier? Ai-je besoin d'écrire un test pour le bouton Ajouter Nouvelles? Ai-je besoin d'écrire un test pour vérifier si l'utilisateur est autorisé sur cette page Index? Voilà ce que j'ai actuellement:

[Test]
public void Index_Should_Redirect_To_Error_View_When_User_Does_Not_Have_Permission()
{
}

[Test]
public void Index_Should_Log_Exception_When_User_Does_Not_Have_Permission()
{
}

[Test]
public void Index_Should_Return_Default_View()
{
   // Act
   var result = newsController.Index();

   // Assert
   result
      .AssertViewRendered()
      .ForView("Index");
}

MISE À JOUR: Voici ma méthode d'action Index:

public ActionResult Index()
{
   IEnumerable<News> news = newsRepository.FindAll();
   return View(news);
}

Tous les articles décents ou exemple de code serait apprécié. Également sur contrib MVC, les exemples de code ne sont pas d'une grande utilité. Je voudrais entendre autant d'opinions possibles.

Merci.

Était-ce utile?

La solution

Vous devez faire la distinction entre les tests unitaires, tests d'intégration et des tests Web. Les tests unitaires sont pour tester différents composants de votre code telles que les actions contrôleur dans l'isolement. Les tests d'intégration sont pour tester l'intégration entre votre code et les composants externes comme un dépôt qui lit et écrit des données à partir d'une base de données et un test Web est destiné à tester un scénario utilisateur complet de votre application telle que la saisie de l'utilisateur une adresse dans la barre d'adresse de son navigateur, en cliquant sur le bouton une ...

MVCContrib.TestHelper et Rhino Mocks ont pour but de simplifier vos tests unitaires. Donc, dans votre scénario, vous devez tester votre action contrôleur Index. Sans montrer le code cette action du contrôleur contient, il est difficile de dire ce que vous devez exactement test. En général ce que vous pouvez tester l'unité dans une action du contrôleur est qu'il valide l'entrée, appelle les méthodes appropriées sur le dépôt et selon les résultats, il retourne la vue appropriée.

Alors supposons que vous avez l'action Index ci-dessous vous êtes prêt à tester:

public class HomeController: Controller
{
    private readony INewRepository _repository;
    public HomeController(INewRepository repository)
    {
        _repository = repository;
    }

    public ActionResult Index()
    {
        var news = _repository.GetNews();
        return View(news);
    }
}

Et le test unitaire correspondant:

[TestClass]
public class HomeControllerTests : TestControllerBuilder
{
    private HomeController _sut;
    private INewsRepository _repositoryStub;

    [TestInitialize()]
    public void MyTestInitialize() 
    {
        _repositoryStub = MockRepository.GenerateStub<INewsRepository>();
        _sut = new UsersController(_repositoryStub);
        InitializeController(_sut);
    }

    [TestMethod]
    public void UsersController_Index_Should_Fetch_News_From_Repository()
    {
        // arrange
        var news = new News[0];
        _repositoryStub.Stub(x => x.GetNews()).Return(news);

        // act
        var actual = _sut.Index();

        // assert
        actual
            .AssertViewRendered()
            .WithViewData<News[]>()
            .ShouldBe(news);
    }
}

En ce qui concerne vos points de vue sont concernés, vous aurez besoin d'écrire des tests Web pour vérifier qu'ils se comportent comme prévu. Il existe différents outils qui pourraient vous aider ici, comme Sélénium ou utiliser directement Tests Web . Steven Sanderson rel="nofollow"> aussi pour tester les vues que vous pouvez jeter un oeil à.

scroll top