[英]ShimNotSupportedException in MS VisualStudio 2012
我只是想熟悉Visual Studio 2012 RC中的新的Fakes Isolation Framework,但是因此ShimNotSupportedException
的問題。
在初次嘗試時,我嘗試連接委托的每個單獨的shim方法在嘗試運行/調試測試時都引發了ShimNotSupportedException
。
[TestMethod]
public void GetFoo_ValidBar_ReturnsBaz()
{
using(ShimsContext.Create())
{
ShimDateTime.NowGet = () => new DateTime(2012,08,11,10,20,59);
const string expected = "20120811_102059";
string actual = GetFoo();
Assert.AreEqual(expected,actual);
}
}
這是相應的堆棧跟蹤:
GetFoo_ValidBar_ReturnsBaz測試方法引發了一個異常:Microsoft.QualityTools.Testing.Fakes.Shims.ShimNotSupportedException:Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.InvokeTools中的System.DateTime。 Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationRuntime.CheckInstrumentation(MethodBase方法),位於Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.DeTest.Fakes.UnitTestIsolationRun(。 Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.SetShimMethod(Delegate) MethodBase方法) 在Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime(Microsoft.QualityTools.Testing.Fakes.Shims.ShimRuntime.SetShim(Delegate optionalStub,Type receiverType,Object optionalReceiver,字符串名稱,ShimBinding標志,類型returnType,Type [] parameterTypes) .SetShimPublicStatic(在System.Fakes.ShimDateTime.set_NowGet(Func'1值)處在BazTests.cs的48行上的GetFoo_ValidBar_ReturnsBaz()處刪除委托的Stub,類型接收器類型,字符串名稱,類型returnType,類型[] parameterTypes)。
讀完我在MSDN上發現的用於解決此問題的兩個線程后,我按照他們的指示(關閉CodeCoverage,刪除.testsettings文件)對我不起作用!
不過,我已經找到解決此問題的方法:
通過首先從“測試資源管理器”運行所有測試(而不是直接在編碼區域之外使用“ MSTest測試(單擊運行)”按鈕),一切正常,並且不會引發任何異常。 之后,我什至可以調試測試,並且對shim方法的分配按預期進行。
這也適用於我使用過的所有以下墊片。
但是現在,當嘗試實現對數據庫訪問的MS Enterprise Library的偽造品時,我又遇到了同樣的問題。
這是測試的樣子:
[TestMethod]
public void GetFooFromEF_NonEmptyDataReader_ObjectsCorrectlyInstantiated()
{
using(ShimsContext.Create()){
var dataReader = new StubIDataReader()
{
ItemGetString = s => 1,
DepthGet = () => 2
};
ShimFoo.GetBar = guid => dataReader;
var bar = new StubIBar()
{
ConvertIBarToBaz = record => null
};
ShimQux.AllInstances.GetBar = (a, b) => bar;
var dbFactory = new StubDbProviderFactory();
var db = new StubDatabase("test", dbFactory);
ShimDatabaseFactory.CreateDatabaseString = s => db;
List<BarInformation> actual = accessor.InvokeStatic("GetBar",
new Object[] { }) as List<BarInformation>;
Assert.IsTrue(true);
}
}
前兩個墊片分配(ShimFoo和ShimQux)按預期工作。 但是ShimDatabaseFactory.CreateDatabaseString(在嘗試創建新的數據庫實例時,應該使DatabaseFactory.CreateDatabase(string)返回存根數據庫)再次引發ShimNotSupportedException。 而且我不知道為什么!
您有什么想法這里出了什么問題嗎?
我對此表示感謝。
謝謝,
本傑明
我有同樣的問題。 嘗試刪除所有測試設置文件(從磁盤和解決方案中刪除),並確保您的解決方案未引用任何測試設置文件。
另外,請確保您使用的是Visual Studio Testrunner(而不是重新測試代碼的reshaper等)。
我寫了兩個關於這些問題的博客,可能會有所幫助:
我多次以不同的原因看到此錯誤:
問題與測試設置有關。 我做了下面的鏈接建議的工作,並在嘗試了許多可能的解決方案后終於工作了
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.