dotnet核心

时间:2016-11-30 04:21:36

标签: unit-testing mocking xunit.net .net-core isolation-frameworks

我正在开发一个dotnet核心项目,试图在我的Xunit.net测试中模拟一些第三方类。我试图伪造的I类不能通过像Moq或NSubstitute这样的约束框架来模拟。所以我需要一个无约束的框架来做到这一点。

说我想在我的 .net核心测试项目中伪造DateTime.Now。

在.net 4.5中我们有 MSFakes (Moles),Smocks等。它们都没有支持dotnet核心框架。 Shim还没有移植到dotnet核心。

任何人都知道目前实现我的.NET Core目标的隔离框架或技术吗?

2 个答案:

答案 0 :(得分:2)

您可以尝试不同的方式:使用您自己的接口和包装类包装这些第三方库。然后使用实现该接口的虚拟对象。

使用DateTime.Now等静态属性会变得更复杂。但它的工作方式类似:使用ITimeProvider属性定义Now接口。使用DateTimeWrapper : ITimeProvider添加public DateTime Now => DateTime.Now;,并且 - 为方便起见,但不是必需的 - 围绕它的静态类,例如

static class MyClock 
{ 
    static ITimeProvider _Instance; 
    static void SetInstanceForTesting(ITimeProvider instance) 
    { _Instance = instance; }
    static DateTime Now => _Instance.Now; 
}

或者,您可以将ITimeProvider实例注入需要它的对象。

答案 1 :(得分:1)

有点迟到的回复,但是对于其他任何寻求相同功能的人我都会推荐开源git项目prig:https://github.com/urasandesu/Prig它可以伪造静态方法(他们甚至有一个伪造和隔离DateTime的例子。现在,并且是Microsoft Fakes,TypeMock和JustMock的替代品(所有人都需要花钱或者需要使用最终版本的visual studio)。