2017-03-10 4 views
1

Salut, je commence tout juste avec Test Driven Development. J'ai un code où j'ai deux cas de testLe référentiel Mock généré par NUnit renvoie le même objet dans différents cas de test.

 [Test, Order(3)] 
    public void Should_Not_Create_ServiceAccountTaxCode_If_BillType_Is_Not_RateReady() 
    { 
     //ARRANGE 
     var customerDetailsViewForBillTYpeRateReady = new CustomerTaxDetailsView 
     { 
      BillType = (int)BillTypes.BillReady 
     }; 

     _repository.Stub(x => x.GetCustomerDetailsForTaxes(Arg<int>.Is.Anything)).Return(dict.Dequeue()); 


     //ACT 
     var result = _concern.PopulateServiceAccountWithTaxDetails(Arg<int>.Is.Anything); 

    [Test, Order(4)] 
    public void Should_Create_ServiceAccountTaxCode_If_BillType_Is_RateReady() 
    { 
     //ARRANGE 
     const int serviceAccountId = 1; 
     var customerDetailsView = new CustomerTaxDetailsView 
     { 
      BillType = (int)BillTypes.RateReady, 
      ServiceTypeId = (int)ServiceTypes.Electric 
     }; 
     _repository.Stub(x => x.GetCustomerDetailsForTaxes(serviceAccountId)) 
      .Return(customerDetailsView).Repeat.Once(); 
     var result = _concern.PopulateServiceAccountWithTaxDetails(serviceAccountId); 

Et je générer la maquette en utilisant la syntaxe suivante dans la

[OneTimeSetUp] 
    public void Initialize() 
    { 
    _repository = MockRepository.GenerateMock<IServiceAccountTaxCodeRepository>(); 

Le seul problème est que dans le second cas de test aussi mon objet résultat est customerDetailsViewForBillTYpeRateReady à partir du premier cas de test. Pourquoi est-ce arrivé? Et si j'exécute ces tests indépendamment, tout est passé. Toute aide serait appréciée ..

+0

dict.dequeue supprime réellement l'objet customerDetailsViewForBillTYpeRateReady. – user1505521

Répondre

1

Je crois que votre problème est que vous configurez la méthode GetCustomerDetailsForTaxes() en deux endroits sur le même objet _repository. Cette configuration sera exécutée toujours:

_repository.Stub(x => x.GetCustomerDetailsForTaxes(Arg<int>.Is.Anything)).Return(dict.Dequeue()); 

La raison est que vous avez spécifié Arg<int>.Is.Anything. Ainsi, les cas de test saisiront cette configuration, car dans le deuxième cas de test, vous avez const int serviceAccountId = 1;, qui est également Arg<int>.Is.Anything.

Je plutôt dans le premier cas test spécifier

const int serviceAccountId = 2; 
_repository.Stub(x => x.GetCustomerDetailsForTaxes(serviceAccountId)).Return(dict.Dequeue()); 

Maintenant, vous aurez la configuration différente pour les deux cas de test.

+0

Parfait qui a travaillé merci .. – user1505521