我應用於MSTest2項目MS假框架在.NET框架嘲笑靜態成員,如如何莫克靜態屬性或方法在dotnetcore 2.0單元測試
System.DateTime.Now
在dotnet core 2.0中是否有等價的框架可以和Fake做同樣的事情?
我應用於MSTest2項目MS假框架在.NET框架嘲笑靜態成員,如如何莫克靜態屬性或方法在dotnetcore 2.0單元測試
System.DateTime.Now
在dotnet core 2.0中是否有等價的框架可以和Fake做同樣的事情?
首先讓我告訴你不能嘲笑DateTime.Now,因爲'Now'是一個靜態屬性。嘲笑的主要思想是將依賴關係分解,並且應該將相關性注入相應的類別中以嘲笑它。這意味着你必須實現一個到依賴類的接口,並且該接口應該向正在消耗依賴類的類注入。對於單元測試模擬相同的界面。因此,接口將永遠不適合靜態,因爲接口將始終期望concreate類類型,並且必須實例化實現相同接口的類。如果你使用MSTest,有一個叫做Shim的概念(我不是Shim的粉絲)。您可以創建假裝配。你的情況,你可以創建「系統」和假的DateTime像下面的假裝配,
[TestMethod]
public void TestCurrentYear()
{
int fixedYear = 2000;
// Shims can be used only in a ShimsContext:
using (ShimsContext.Create())
{
// Arrange:
// Shim DateTime.Now to return a fixed date:
System.Fakes.ShimDateTime.NowGet =
() =>
{ return new DateTime(fixedYear, 1, 1); };
// Instantiate the component under test:
var componentUnderTest = new MyComponent();
// Act:
int year = componentUnderTest.GetTheCurrentYear();
// Assert:
// This will always be true if the component is working:
Assert.AreEqual(fixedYear, year);
}
}
要墊片或創建你需要的Visual Studio Ultimate和上述假裝配。
請閱讀更多關於墊片的信息here
這不是答案。 .net核心不支持MSFakes。 – sjdirect
這是如何考慮脫離主題? – sjdirect