3

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

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

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

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

4

3 回答 3

2

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

使用 DateTime.Now 等静态属性,事情变得更加复杂。但它的工作原理类似:定义一个ITimeProvider带有Now属性的接口。添加 aDateTimeWrapper : ITimeProvider和 apublic DateTime Now => DateTime.Now;和 - 为方便起见,但不是必需的 - 在它周围添加一个静态类,例如

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

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

于 2016-11-30T09:39:08.593 回答
1

回复有点晚了,但对于其他关注相同功能的人,我会推荐开源 git 项目 prig:https ://github.com/urasandesu/Prig它可以伪造静态方法(他们甚至有一个伪造的例子和隔离 DateTime.Now) 并且是 Microsoft Fakes、TypeMock 和 JustMock 的替代品(所有这些都需要花钱或需要最终版本的 Visual Studio 才能使用)。

于 2017-05-25T15:35:26.530 回答
1

姿势是一种选择。内存满是免费的 https://GitHub.com/tonerdo/pose

于 2021-10-05T11:36:01.380 回答