7
votes

Nunit conserve des données statiques à travers des tests

J'ai une classe statique que j'utilise pour conserver mes données de test. Lorsque je le réfère dans mes tests de Nunit, les modifications que je fais sont persistées à travers des tests.

Par exemple, j'ai ce code dans mon test: xxx

et des données d'échantillon est quelque chose comme ceci: xxx

La première fois que je l'exécute, commanddo a 0 commande de commande. La deuxième fois qu'il a 1, puis 2, etc. Je pensais entre les tests de Nunit, rien n'était persisté. Est-ce que cela met en cache des propriétés statiques?


0 commentaires

3 Réponses :


0
votes

Je pense avoir répondu à ma propre question avec un peu plus de violation. Je ne sais toujours pas pourquoi il mettait à jour l'objet, mais si je modifie la classe statique à cela, cela fonctionne:

public static class SampleData {
    public static OrderDto OrderDto {
        get { return new OrderDto { LastName = "Smith", CreatedById = 5, CreatedByDisplayName = "Smith2" }; }
    }
}


1 commentaires

Il metchait à jour l'objet statique car il y avait une instance et c'est ce que vos tests ont fait. Les tests d'unités sont comme un code normal; S'ils mettent à jour un champ statique, le champ est mis à jour. Maintenant, vous retournez une nouvelle instance chaque fois que cette méthode est appelée, ce qui signifie que les modifications n'affectent que l'instance actuelle.



8
votes

tests devrait être isolé , mais cela ne signifie pas qu'ils sont automatiquement.

Nunit exécutera une méthode du testFixture étiquetée avec [Configuration] avant chaque test et [dérappé] par la suite. Vous pouvez utiliser ceci et l'autre Attributs de Nunit à configurer votre appareil.


0 commentaires

12
votes

Il appartient à vous strong> pour vous assurer que les données ne sont pas persistées sur des tests d'unités. Lorsqu'il est exécuté, un ensemble de test unitaire se comporte comme un assemblage normal, de sorte que toute statique que vous initialisez séquez-vous de cette façon pour la durée du test.

La plupart des cadres de test d'unité fournissent un moyen d'initialiser et de nettoyer votre état avant et après le test . In Nunit, la manière de le faire est d'avoir une méthode avec [configuration] code> attribut. Cette méthode est exécutée avant chaque test. P>

Le moyen le plus simple d'atteindre ce que je pense que vous voulez obtenir est d'initialiser un champ membre dans testsetup code> et d'utiliser cela entre différents tests. Notez que nous n'utilisons pas un membre statique ici, ce qui signifie que nous n'avons pas à le nettoyer après le test. P>

[TestFixture]
public class MyTests {

  OrderDto OrderDto;
  OrderDetailDto;
  [SetUp]
  public void Setup() {
    _OrderDto = new OrderDto { LastName = "Smith", CreatedById = 5, CreatedByDisplayName = "Smith2" };
    _OrderDetailDto = new OrderDetailDto {/*Sample data*/};
  }

  [Test]
  public void TestOrderDetailIsAddedToOrder() {
    orderDto.OrderDetails.Add(_OrderDetailDto);
  }
}


0 commentaires