2010-08-22 28 views
2

Je souhaite utiliser moq une méthode void et définir une valeur pour une propriété protégée lorsqu'elle est appelée.Moq modify protected à l'appel de la méthode void

public class MyClass{ public Guid Id {get; protected set; } } 

public interface IMyRespository { public void Save(MyClass myClass); } 

Quelque chose comme:

var moq = new Mock<IMyRespository>(); 
var my = new MyClass(); 
moq.Setup(x=>x.Save(my)); 

Je veux installer qu'ID sur sauvegarde est plus un Guid.Empty. Save est une méthode vide donc pas de retour, et en utilisant:

.Callback(() => my = new MyClassImpl(new Guid(".."))) 

ne fonctionne pas ..

Répondre

2

D'abord, vous devez configurer l'attente correctement. Je pense que ce que vous voulez réellement est de mettre en place la maquette pour qu'il accepte une instance de MyClass:

moq.Setup(x=>x.Save(It.IsAny<MyClass>())); 

Ensuite, vous configurez un rappel comme ceci:

moq.Setup(x=>x.Save(It.IsAny<MyClass>())) 
    .Callback((myClassParam) => my = myClassParam); 

Mettre tous ensemble sera vous permettent de construire une maquette qui accepte MyClass et enregistre la variable par exemple MyClass-my:

[TestMethod] 
public void Test() { 
    var moq = new Mock<IMyRespository>(); 
    MyClass my = null; 
    moq.Setup(x=>x.Save(It.IsAny<MyClass>())) 
    .Callback((myClassParam) => my = myClassParam); 
    var newMyClass = new MyClassImpl(new Guid("..")); 
    moq.Object.Save(newMyClass); 
    Assert.AreSame(newMyClass, my); 
}