Vérifiez la valeur du paramètre de référence Moq

Je viens de passé à Moq et ont couru dans un problème. Je me suis mise à l'essai d'une méthode qui crée une nouvelle instance d'un objet de l'entreprise, de définir les propriétés de l'objet de la saisie de l'utilisateur les valeurs et les appels de méthode (SaveCustomerContact ) pour enregistrer le nouvel objet. L'objet de l'entreprise est passé comme un argument ref parce qu'il passe par un accès distant de la couche. J'ai besoin de tester que l'objet est transmis à SaveCustomerContact a toutes ses propriétés définie comme prévu, mais parce qu'il est instancié en tant que nouvelle méthode du contrôleur je n'arrive pas à le faire.

public void AddContact() {

    var contact = new CustomerContact() { CustomerId = m_model.CustomerId };

    contact.Name = m_model.CustomerContactName;
    contact.PhoneNumber = m_model.PhoneNumber;
    contact.FaxNumber = m_model.FaxNumber;
    contact.Email = m_model.Email;
    contact.ReceiveInvoiceFlag = m_model.ReceiveInvoiceFlag;
    contact.ReceiveStatementFlag = m_model.ReceiveStatementFlag;
    contact.ReceiveContractFlag = m_model.ReceiveContractFlag;
    contact.EmailFlag = m_model.EmailFlag;
    contact.FaxFlag = m_model.FaxFlag;
    contact.PostalMailFlag = m_model.PostalMailFlag;
    contact.CustomerLocationId = m_model.CustomerLocationId;

    RemotingHandler.SaveCustomerContact( ref contact );
}

Voici le test:

[TestMethod()]
public void AddContactTest() {

    int customerId = 0;

    string name = "a";

    var actual = new CustomerContact();

    var expected = new CustomerContact() {
        CustomerId = customerId,
        Name = name
    };

    model.Setup( m => m.CustomerId ).Returns( customerId );
    model.SetupProperty( m => model.CustomerContactName, name );
    model.SetupProperty( m => m.PhoneNumber, string.Empty );
    model.SetupProperty( m => m.FaxNumber, string.Empty );
    model.SetupProperty( m => m.Email, string.Empty );
    model.SetupProperty( m => m.ReceiveInvoiceFlag, false );
    model.SetupProperty( m => m.ReceiveStatementFlag, false );
    model.SetupProperty( m => m.ReceiveContractFlag, false );
    model.SetupProperty( m => m.EmailFlag, false );
    model.SetupProperty( m => m.FaxFlag, false );
    model.SetupProperty( m => m.PostalMailFlag, false );
    model.SetupProperty( m => m.CustomerLocationId, 0 );

    remote
        .Setup( r => r.SaveCustomerContact( ref actual ) )
        .Callback( () => Assert.AreEqual( actual, expected ) );

    target.AddContact();

}

C'est juste la plus récente de nombreuses tentatives pour obtenir ahold de ce paramètre. Pour référence, la valeur réelle ne change pas sa valeur initiale (construits) de l'état.

Déplacement de l'Affirmer.AreEqual(attendus, réel) après l'objectif de l'appel échoue. Si je peux ajouter .Vérifiables() pour le programme d'installation à la place de la .Rappel et ensuite appeler à distance.Vérifiez une fois que la cible (ou, je suppose, jeu de la fantaisie à une stricte), il échoue toujours, car le paramètre-je fournir à l'essai n'est pas de la même instance que celle qui est créée dans la méthode de contrôleur.

Je suis en utilisant Moq 3.0.308.2. Toutes les idées sur la façon de tester ce serait apprécié. Merci!

InformationsquelleAutor Simon Calvin | 2009-04-07