Comment faire Moq ignorer les arguments qui sont des ref ou

Dans RhinoMocks, vous pouvez juste dire votre se moque de IgnoreArguments comme une déclaration générale. Dans Moq, paraît-il, vous devez le préciser.IsAny() pour chaque argument. Toutefois, cela ne fonctionne pas pour ref et de sortir des arguments. Comment puis-je tester la méthode suivante où j'ai besoin d'Moq le service interne d'appel pour le retour à un résultat précis:

public void MyMethod() {
    //DoStuff

    IList<SomeObject> errors = new List<SomeObject>();
    var result = _service.DoSomething(ref errors, ref param1, param2);

    //Do more stuff
}

Méthode d'essai:

public void TestOfMyMethod() {
    //Setup
    var moqService = new Mock<IMyService>();
    IList<String> errors;
    var model = new MyModel();

    //This returns null, presumably becuase "errors" 
    //here does not refer to the same object as "errors" in MyMethod
    moqService.Setup(t => t.DoSomething(ref errors, ref model, It.IsAny<SomeType>()).
        Returns(new OtherType()));  
}

Mise à JOUR: Alors, l'évolution des erreurs de "ref" de "sortir" des œuvres. Donc il semble que la vraie question est d'avoir une référence de paramètre que vous ne pouvez pas injecter.

  • Vous pouvez poster à la signature de DoSomething parce que dans votre exemple, il a 3 arguments out errors, param1, param2 mais dans votre test, vous êtes en l'appelant avec deux arguments out errors, It.IsAny<SomeType>() Peut-être vous êtes moqué d'un mal de surcharge, parce que votre code doit fonctionner de toute façon voir moq l'aide des méthodes de la section.
  • C'était juste un exemple - mais j'ai mis à jour le test en parallèle avec l'exemple de code
InformationsquelleAutor sydneyos | 2012-06-04