dotnet 核心的无约束隔离(模拟)框架

问题描述 投票:0回答:4

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

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

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

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

unit-testing mocking xunit.net .net-core isolation-frameworks
4个回答
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
投票

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


1
投票

姿势是一个选项。内存已满,免费 https://GitHub.com/tonerdo/pose


0
投票

如果您正在寻找一个免费且功能强大的 dotnet core 单元测试框架,我找不到满足我需求的项目。我自己创建了一个。请放心使用:

GitHub 上的 UnconstrainedMockiu

© www.soinside.com 2019 - 2024. All rights reserved.