2016-11-27 9 views
1

Moockをモックフレームワークとして使用するのに苦労していて、非常に簡単なサンプルコードをコピーしました。私は本当にここで馬鹿なものを逃しているに違いない。戻り値のメソッドを指していても、セットアップ呼び出しでNotSupportedExceptionがスローされます。このコードは、私のテストクラスの一部である:単純なMoqコードでもNotSupportedExceptionがスローされています

class Test 
{ 
    public string DoSomethingStringy(string s) 
    { 
     return s; 
    } 
} 

[TestInitialize] 
public void Setup() 
{ 
    var mock = new Mock<Test>(); 
    mock.Setup(x => x.DoSomethingStringy(It.IsAny<string>())) 
     .Returns((string s) => s.ToLower()); 
} 

答えて

2

あなたはtypemockアイソレータと非仮想物体を模擬することができ、あなたは非常に簡単にソースコードを変更しなくてそうすることができます。

テスト対象オブジェクトの偽インスタンスを作成し、テストされたメソッドの新しい動作を判断するだけです。

私はあなたが投稿コードのテストを作成しました。例えば

[TestMethod] 
     public void TestMethod1() 
     { 
      var mock = Isolate.Fake.Instance<Test>(); 
      Isolate.WhenCalled(() => mock.DoSomethingStringy(null)).DoInstead(contaxt => 
      { 
       return (contaxt.Parameters[0] as string).ToLower(); 
      }); 

      var res = mock.DoSomethingStringy("SOMESTRING"); 

      Assert.AreEqual("somestring", res); 
     } 
3

例外エラーメッセージがあなたの問題が何であるかのヒントを与えることができます:非仮想(VBでオーバーライド)メンバー

無効なセットアップ

これは、クラスのメソッドを嘲笑しているときは、抽象クラスまたは仮想クラスの場合のみモックできます(どちらのクラスでもない場合)。

ので、最も簡単な修正は、この方法は、仮想作るために次のようになります。

public virtual string DoSomethingStringy(string s) 
{ 
    return s; 
} 
+1

また 'class'を' public'( 'internal'は適切な' InternalsVisibleToAttribute'どこかを持っているだけでOKですでなければなりません)。 –

関連する問題