pologise如果這個問題已被問到,但我無法在任何地方找到答案。MOQ返回動態類型作爲對象問題
我的問題是嘲笑使用MOQ返回方法返回動態類型的返回方法。我正在使用使用動態時間的第三部分庫。 MOQ似乎將動態類型作爲對象。
Mock<IFacebookHelper> mockFbHelp = new Mock<IFacebookHelper>();
mockFbHelp.Setup(x => x.Get("me")).Returns(new { email = "[email protected]", id="9999" });
方法在嘲笑的幫手。
public dynamic Get(string p)
{
var client = new FacebookClient(AccessToken);
return client.Get("me");
}
來自控制器的代碼使用模擬結果。
_facebookHelper.AccessToken = accessToken;
dynamic result = _facebookHelper.Get("me");
int facebookId = int.Parse(result.id); //This errors as id doesn't exist.
基本上MOQ返回動態類型的對象,要求鑄造的東西。
有誰知道如何解決這個問題?我假設這可能是因爲MOQ沒有在.NET 4中編碼,因此不支持動態類型?
編輯
其實我不認爲這是一個最小起訂量問題,我創建了自己的模擬類,仍然有同樣的問題。雖然我不清楚發生了什麼,但我對動態類型很陌生。
編輯2 - 部分回答..問題無關MOQ所有
後其實這個問題似乎是由於動態類型在不同的組件被創建。雖然我用JObject類型瞭解了最初的問題,但我仍然想知道這一點。
namespace MyLib.Tools
{
public interface IDynTest
{
dynamic GetData();
}
}
namespace MyLib.Tools
{
public class DynTest : Effect.Tools.IDynTest
{
public dynamic GetData() {
return new { DynamicProperty = "hello" };
}
}
}
namespace Warrior.WebUI.Infrastructure
{
public class UseDynTest
{
private readonly IDynTest dynTest;
public UseDynTest(IDynTest dynTest)
{
this.dynTest = dynTest;
}
public string RetTest()
{
return dynTest.GetData().DynamicProperty;
}
}
}
namespace Warrior.Tests
{
[TestClass]
public class TestDynTest
{
[TestMethod]
public void TestMethod1()
{
//Mock<IDynTest> mockDynTest = new Mock<IDynTest>();
//mockDynTest.Setup(x => x.GetData()).Returns(new { DynamicProperty = "From Unit Test" });
DynTestProxy dynTestProxy = new DynTestProxy();
UseDynTest useTest = new UseDynTest(dynTestProxy);
string results = useTest.RetTest();
Assert.AreEqual("From Unit Test", results);
}
}
}
namespace Warrior.Tests
{
public class DynTestProxy:IDynTest
{
public dynamic GetData()
{
return (dynamic) new { DynamicProperty = "From Unit Test" };
}
}
}
存在由命名空間MyLib中,Warrior.WebUI和Warrior.Tests表示3項目。
由於它是測試失敗,並顯示錯誤.. 「對象」中不包含關於「DynamicProperty」 發生上RetTest()
然而的定義,如果我只需移動DynTestProxy類進Warrior.WebUI項目一切工作正常。我猜在發送不同程序集的動態類型時會出現問題。
動態只是一個C#關鍵字,沒有類型'動態'。如果你使用任何對象,通過一個動態的本地名稱爲'id'的屬性/字段,它應該可以工作。 – Bond