2010-09-10 6 views
1

Voici le code:Pourquoi les attentes de Rhino Mock ne sont pas satisfaites?

public interface IAccessPoint 
{ 
    int BackHaulMaximum { get; set; } 

    bool BackHaulMaximumReached(); 
    void EmailNetworkProvider(); 
} 

public class AccessPoint : IAccessPoint 
{ 
    private IMailProvider Mailer { get; set; } 

    public AccessPoint(IMailProvider provider) 
    { 
     this.Mailer = provider ?? new DefaultMailProvider(); 
    } 

    public int BackHaulMaximum { get; set; } 

    public bool BackHaulMaximumReached() 
    { 
     if (BackHaulMaximum > 80) 
     { 
      EmailNetworkProvider(); 
      return true; 
     } 
     return false; 
    } 


    public void EmailNetworkProvider() 
    { 
     this.Mailer.SendMail(); 
    } 
} 

public interface IMailProvider 
{ 
    void SendMail(); 
} 

public class DefaultMailProvider : IMailProvider 
{ 
    public void SendMail() 
    { 

    } 
} 

// Here is the Test, It is not calling EmailNetworkProvider which calls SendMail() 

[TestFixture] 
public class Tests 
{ 
    [Test] 
    public void NetworkProviderShouldBeEmailedWhenBackHaulMaximumIsReached() 
    { 
     var mailerMock = MockRepository.GenerateMock<IMailProvider>(); 

     mailerMock.Expect(x => x.SendMail()); 

     var accessPoint = new AccessPoint(mailerMock); 

     accessPoint.BackHaulMaximum = 81; 

     Assert.IsTrue(accessPoint.BackHaulMaximumReached()); 

     mailerMock.VerifyAllExpectations(); 
    } 
} 
+0

Quel est le problème? Quelle est l'erreur? Quel comportement attendez-vous? – Grzenio

Répondre

1

Toute amélioration si vous utilisez ce test?

[Test] 
public void NetworkProviderShouldBeEmailedWhenBackHaulMaximumIsReached() 
{ 
    var mailerMock = MockRepository.GenerateStub<IMailProvider>(); 
    var accessPoint = new AccessPoint(mailerMock); 

    accessPoint.BackHaulMaximum = 81; 

    var actual = accessPoint.BackHaulMaximumReached(); 

    Assert.AreEqual(true, actual); 
    mailerMock.AssertWasCalled(x => x.SendMail()); 
} 

Comme un côté note, BackhaulMaximumReached() est une sorte de conception bizarre. Aucune notification ne sera faite à moins qu'un consommateur vérifie si le maximum de retour a été atteint, indépendamment de la valeur BackHaulMaximum.

Il est sémantiquement déroutant de joindre des commandes et des requêtes de cette manière.

Questions connexes