2009-06-11 7 views
0

// IsExistは常にfalseです、それはバグですか?模擬問題

[TestMethod] 
    public void IsExist() 
    { 
     private Mock<IRepository> repository = new Mock<IRepository>(); 
        Foo f = new Foo(); 
        repository.Expect(s => s.IsExist(foo)).Returns(true); 
     var controller = new MyController(repository.Object); 
     var result = (ViewResult)controller.DoSometing(); 

    } 

      public class MyController : Controller 
      { 

      IRepository _repository ; 

      public MyController(IRepository repository) 
    { 
     _repository = repository; 

    } 

      public ViewResult DoSometing() 
    { 
     bool IsExist = _repository.IsExist(new Foo()); 
        //IsExist always false,is it a bug? 
     return View(foo); 
    } 

      } 

答えて

1

最初に、どのモックライブラリが使用していますか(答えはそれに基づいて変更されることがあります)?

Rhino Mockを使用している場合は、上部に作成する具体的なfooのインスタンスを受け取ったときに、期待値がtrueを返すように設定されていることが問題です。 (fooオブジェクトのバージョンという期待がに対して設定されていないので)それはfalseを返しますので、これは、そのあなたのコントローラで実行するときに渡されているものに別のインスタンスです。あなたはこのコードを持っていた場合より明確にするために、:

Foo f1 = new Foo(); 
Foo f2 = new Foo(); 
repository.Expect(s => s.IsExist(f1)).Returns(true); 
bool b1 = repository.Object.IsExist(f1); 
bool b2 = repository.Object.IsExist(f2); 

を私はb1が真実であろうと期待される(それはあなたが設定し、特定の期待だから、つまり与えられたf1リターンtrue)とb2が偽だろう(あなたはdidnのため、 f2を受け取った場合、リポジトリに特定の処理を実行するように指示するので、falseを返すというデフォルトの動作に戻ります)。

Rhinoのモックアップでは、このようなあなたの期待を設定する必要があるでしょう:IsExistがのFooオブジェクトの任意のインスタンスで呼び出された場合はtrueを返します

repository.Expect(s => s.IsExist(Arg<Foo>.Is.TypeOf)).Returns(true); 

を。

repository.Expect(s => s.IsExist(f => f.SomeProperty == "blah" && f.OtherProperty.StartsWith("baz")))).Returns(true); 

foo.SomeProperty"blah"に等しかったとfoo.OtherProperty"baz"で開始した場合trueを返します:あなたは、より具体的にするために必要な場合は、このようなものを持つことができます。あなたの構文は少し違っているように、Rhinoのモックを使用して、うまくいけば、正しい方向にあなたを指すようしているよう

は...マルワンinteresting.thanks

+0

あなたは間違っています。 – tobias

0

オブジェクトプロパティが存在するかどうかを確認する前に、いくつかの値で初期化します。

public ViewResult DoSometing() 
    { 
     Foo obj = new Foo(); 
     obj.Property1 = "some value"; 
     bool IsExist = _repository.IsExist(obj); 
        //IsExist always false,is it a bug? 
     return View(foo); 
    } 
+0

を見ていません。 – tobias