2010-06-15 33 views
6

我想建立一個測試對一些傳統的方法,實現了參數。 你能舉個例子說明如何做到這一點?Moq示例使用出來和參考需要

+2

你需要澄清你在做什麼,以及爲什麼不按預期工作。只是「Moq無參數」是不夠的 - 首先,爲什麼你需要Moq?請顯示一些代碼。 – 2010-06-15 08:41:24

+0

夠公平了。我不得不做些事情,因爲環境很複雜。我只是想知道是否有一個完整的代碼片段。就是這樣。 我會把東西放在一起,併發布它 – user9969 2010-06-15 08:44:07

回答

19

僅分配測試中的outref參數。

鑑於這種接口:

public interface ILegacy 
{ 
    bool Foo(out string bar); 
} 

你可以寫這樣一個測試:

[TestMethod] 
public void Test13() 
{ 
    string bar = "ploeh"; 

    var legacyStub = new Mock<ILegacy>(); 
    legacyStub.Setup(l => l.Foo(out bar)) 
     .Returns(true); 

    Assert.IsTrue(legacyStub.Object.Foo(out bar)); 
    Assert.AreEqual("ploeh", bar); 
} 
+0

fantastic.Thats我所需要的。只是讓我去的東西。 雖然你沒有使用「It.IsAny」東西,但有一件事 EG(Foo(out it.IsAny )); 我認爲這是某種required.Could你澄清我會很感激。感謝 – user9969 2010-06-15 08:55:56

+0

很多It.Is *在快速入門... - 我建議定期閱讀相同的 - 你將無法消化它在一個單通(如果你需要在單個測試套件中全部使用它,那麼你做錯了什麼) – 2010-06-15 09:02:15

+1

@ devnet247:這對你來說是不值得一個+1的 - 它對Mark的時間幾乎沒有什麼尊重? (也有人給Q 1 +1 - 我認爲這是馬克 - 我有-1來抵消它,因爲沒有完成作業)。 + 1這個答案。 – 2010-06-15 09:04:58

2

任何問題在http://code.google.com/p/moq/wiki/QuickStart頂部的第二個例子嗎?如果你不打算尋找這樣的事情,你應該給出你想要做的事情的例子。

+0

我同意。我很抱歉。我真的不知道該從哪裏開始,因爲實際的「真實代碼」有點複雜,無法發佈。我應該自己創建一個惡作劇的例子.Lesson瞭解到 – user9969 2010-06-15 09:01:51

+0

+1我有點兒忘了快速啓動了:) – 2010-06-15 09:08:03

1

順便說一句,如果你想使用moq(當前)來模擬輸出參數,你也必須做下面的箍跳。假設你想模擬一個返回另一個模擬對象的輸出參數,例如

var mockServiceA = new Mock<IMyService>(); 
var mockServiceOutput = new Mock<IMyServiceOutput>(); 

// This will not work... 
mockServiceA.Setup(svc => svc.DoSomething(out mockServiceOutput.Object)); 

// To have this work you have to do the following 
IMyServiceOutput castOutput = mockServiceOutput.Object; 
mockServiceA.Setup(svc => svc.DoSomething(out castOutput));