我正在研究一个dotnet核心项目,试图在我的xunit.net测试中模拟某些第三方类。我要伪造的课程不是通过诸如MOQ或Nsubstitute之类的约束框架来模拟的。因此,我需要一个无约束的框架来做到这一点。
说我想在我的 .net core 测试项目中伪造DateTime.now。
在.NET 4.5中,我们有 msfakes (摩尔),Smocks等。它们都没有支持Dotnet Core框架。垫片还没有移植到dotnet core。
任何人都知道任何隔离框架或技术,目前将实现我的.NET核心目标?
您可以尝试另一种方式:用自己的接口和包装类别包裹那些第三方Libs。然后使用实现该接口的虚拟对象。
诸如dateTime.now之类的静态属性变得更加复杂。但是它的工作类似:使用Now
属性定义ITimeProvider
接口。添加带有public DateTime Now => DateTime.Now;
的DateTimeWrapper : ITimeProvider
,并为方便起见,但不需要 - 围绕它的静态类,例如
static class MyClock
{
static ITimeProvider _Instance;
static void SetInstanceForTesting(ITimeProvider instance)
{ _Instance = instance; }
static DateTime Now => _Instance.Now;
}
另外,您可以将ITimeProvider
实例注入需要它的对象。
一个有些晚回复,但是对于其他人照顾同样的功能,我会推荐开源git项目prig:https://github.com/urasandesu/prig,假静态方法(它们甚至具有伪造和隔离dateTime的示例。Div>
姿势是一个选择。它是免费的记忆https://github.com/tonerdo/pose