2

moq void メソッドを使用し、呼び出されたときに保護されたプロパティに値を設定したいと考えています。

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

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

何かのようなもの:

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

保存時の Id が Guid.Empty ではないことをセットアップしたい。Save は void メソッドであるため、戻り値はありません。次を使用します。

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

動かない..

4

1 に答える 1

2

まず、期待値を適切に設定する必要があります。あなたが実際に望んでいるのは、モックをセットアップして、次のインスタンスを受け入れることだと思いますMyClass

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

次に、次のようにコールバックを設定します。

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

すべてをまとめると、インスタンスを受け入れて変数MyClassに保存するモックを作成できます。MyClassmy

[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);
}
于 2010-08-22T23:20:03.170 に答える