XUnit, AutoFixture et Moq les meilleures pratiques

Je suis en train de lire beaucoup de documentation et des exemples sur la façon de bien l'unité de tester des choses en combinant les trois composants dans le titre. Je suis venu avec une méthode d'essai pour la méthode sur mon entreprise logique, mais il se sent très maladroit et sale.

J'aimerais avoir quelques commentaires de gens plus expérimentés sur ce sujet, afin de voir comment je peux l'améliorer.

Voici le code, l'explication suivante:

[Fact]
public void ShouldGetItemWithSameId()
{
    var fixture = new Fixture().Customize(new AutoMoqCustomization());
    var facade = fixture.Freeze<Mock<IDataFacade>>();
    facade.Setup(c => c.Get(It.IsAny<int>())).Returns((int i) => new Item { Key = i });

    var sut = fixture.Create<BusinessLogic>();
    var expected = fixture.Create<int>();

    Assert.Equal(expected, sut.Get(expected).Key);
}

Mon BusinessLogic de classe prend une IDataFacade comme paramètre dans le constructeur, qui est responsable en sa Get(int) méthode pour récupérer l'élément avec le même Id, jolis trucs de base.

- Je congeler le IDataFacade maquette et je l'ai configuré pour construire un objet qui correspond à l'Id dans It.IsAny<int>. J'ai ensuite créer mon SUT et le tester. Fonctionne très bien.

Je voudrais comprendre si je peux améliorer les choses en considérant les éléments suivants:

  • Je dois tester des méthodes plus complexes, comme un Query méthode qui prend une classe contenant beaucoup de propriétés qui seront utilisées comme filtres sur les propriétés correspondantes sur le type qui est interrogée. Dans ce cas, je ne sais pas comment faire le "Setup" de la maquette, depuis que j'ai initialisation de tous les, ou à proximité de tous, les propriétés de l'retourné type, et dans ce scénario, il n'est pas un Élément unique, mais un ensemble de la collection
  • La partie configuration se sent à sa place, j'aimerais pouvoir la réutiliser dans plusieurs méthodes

J'ai d'autres tests à l'aide de Theory avec AutoMoqData mais j'ai été incapable de réaliser ce test (et je pense que les plus complexes) à l'aide de cette approche, j'ai donc changé de revenir à la plaine de Fact avec manuellement instancié luminaire.

Toute aide sera très appréciée.

Avez-vous envisagé (Auto)NSubstitute - j'ai tenu sur mes "quel est le problème avec Moq' défaut attitude trop longtemps. weareadaptive.com/blog/2014/09/30/why-nsubstitute

OriginalL'auteur Matteo Mosca | 2014-12-18