1

タイトルに記載されているように、これらの 2 行のコードでエラーが発生します。のスタブを定義しようとしていますTestClass

var stubTestClass = new StubsTutorial.Moles.STestClass();
stubTestClass.WriteStuff = () => "Moled in static class!";

そして、これが関数 WriteStuff() の定義方法です

public class TestClass {
  public string WriteStuff() {
    return "Stuff written in main class.";
  }
}

どこが間違っているのかわかりません。そして、方向性が私を助けてくれます。

4

3 に答える 3

0

私はモグラユーザーではありませんが...

「デフォルトでは、すべてのインターフェイスと抽象クラスに対してスタブが生成されますが、仮想メソッドを公開する非抽象クラスのスタブを生成するように Moles を構成することもできます」

そう

a) 正しく構成されていますか b) a) が正しい場合、メソッドは仮想としてマークされていないことに注意してください

すなわち

public virtual string WriteStuff() { ... }

囲んでいるクラスが具体的であるため (abstract または interface とマークされていない)

于 2013-01-01T12:59:01.277 に答える
0

スタブは、パブリック抽象メソッドと仮想メソッドをオーバーライドすることによって、偽のデリゲートを作成します。メソッドが virtual または abstract とマークされていない場合、スタブ デリゲートに値を割り当てようとしても、メソッドがオーバーライドされて割り当てられたデリゲートが返されないため、コンパイラによって無効にされます。1 つは単に public で、もう 1 つは public virtual の 2 つのメソッドでテスト クラスをスタブ化して試してみてください。インターフェイス コントラクト、抽象メソッド、または仮想メソッドを持たないパブリック クラスをテストするには、スタブではなく、shim を使用する必要があります。

于 2014-01-09T20:50:24.200 に答える
0

私が見つけたチュートリアルから:

各モル タイプは、その名前の先頭に「M」を追加し、それを .Moles 名前空間に配置することによって命名されます。

だから多分あなたのライン

var stubTestClass = new StubsTutorial.Moles.STestClass();

に変更する必要があります

var moleTestClass = new StubsTutorial.Moles.MTestClass();

Microsoft Moles の経験はありませんが。

于 2013-01-01T13:38:52.410 に答える