1

そうですね、タイトルがすべてを物語っています。

[TestMethod()]
void TestFunc()
{
    string r = "Hello World"
    var oMoq = new Mock<object>();
    oMoq.setup(o => o.ToString()).Returns(r);

    Assert.AreEqual(r, oMoq.Object.ToString());
}

VS2012 に同梱されている Moq フレームワークと単体テスト フレームワークの使用 (エクスプレス)

忍者編集、質問を含めるのを忘れていました...
これを可能にする方法はありますか?

(上記のコードがまったくコンパイルされるかどうかは完全にはわかりません.VS2012 atmにアクセスできない頭のてっぺんでしたか)

更新
私のケースについてより明確にするために:

オブジェクトのリストがありました

var myList = new List<MyObj>();

2 つの MyObj モックを追加しました。

var oMoq = new Mock<MyObj>();
oMoq.setup(o => o.ToString()).Returns(r);
myList.Add(oMoq.Object);
myList.Add(oMoq.Object);

私はそれから使用しました

string.Join(",", myList);

私が生産することを期待していたもの

ハローワールド、ハローワールド

しかし、代わりに戻ってきました

MyNamespace.MyObjMoqThingProxy,MyNamespace.MyObjMoqThingProxy

アップデート

使用して

var o = new Mock<object>();
o.Setup(x => x.ToString()).Returns("Hello World");

Assert.AreEqual("Hello World", o.Object.ToString());

収量Castle.Proxies.ObjectProxy

public class Test
{
    override public string ToString()
    {
        return "myTClass";
    }
}
/* snip */
var o = new Mock<Test>();
o.Setup(x => x.ToString()).Returns("Hello World");

Assert.AreEqual("Hello World", o.Object.ToString());

収量Hello World

それで、私の最初の質問に答えます。そのクラスが何らかの ToString をオーバーライドしていない場合、オブジェクトの ToString() メソッドをモックできないと思います。それ(Moq)は、独自の内部 ToString() メソッドを使用します。バガー。

4

2 に答える 2

2

Object.ToString()Moqがモックできる仮想メソッドなので、これはうまくいくと思います。

更新
試行string.Join(",", myList.Select(o=>o.ToString()));

于 2013-06-07T08:13:54.557 に答える
-1

これを行う 1 つの方法は、オブジェクトのインターフェイスを抽出し、そのインターフェイスで ToString() メソッドを明示的に宣言してから、クラスではなくインターフェイスをモックすると、セットアップが機能します。

public interface IMyObj
{
    string ToString();
}

public class MyObj : IMyObj
...

var iMoq = new Mock<IMyObj>();
iMoq.setup(o => o.ToString()).Returns(r);
myList.Add(iMoq.Object);
myList.Add(iMoq.Object);

実装コードへの唯一の変更は、リストのタイプを変更することです

var myList = new List<IMyObj>();
于 2016-07-27T07:58:55.353 に答える