判断注入的服务是否在UnitTest中被调用

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

我正在尝试测试注入的服务是否在我正在测试的服务中使用,并想知道这是否可能?

public class MyService
{
    private readonly IInjectedService _injectedservice;
    public MyService(IInjectedService injectedService1)
    {
        _injectedservice = injectedService1
    }

    public string Method1(int value)
    {
        _injectedservice.Generate();
    }
}

我有 UnitTest 来测试 MyService 类,但我想确定 InjectedService 是否在 MyService 中使用或运行。在我的测试中,我模拟 IInjectedService InjectedService1 服务通过

c# xunit
1个回答
0
投票

你基本上有两种选择来处理这个问题。一种方法是创建您自己的

IInjectedService
的“假”实现,然后在测试中使用您想要的任何逻辑(例如在内部跟踪布尔值以检测它是否被调用并将其暴露在对象中)。我不会在这里介绍这一点,除非您想采用这种方法(让我知道)。

另一种更常见的方法是仅使用模拟库。下面的示例依赖于 NSubstitute

public sealed class MyServiceTests
{
    [Fact]
    public void CallingMethod1GeneratesInjectedService()
    {
        // Arrange
        var injectedService = Substitute.For<IInjectedService>();
        var myService = new MyService(injectedService);
        
        // Act
        myService.Method1(1);

        // Assert
        injectedService.Received().Generate();
    }
}

(确保根据实际对象和方法的名称更改测试名称,因为显然现在没有多大意义)

如果需要,您还可以选择使用具有类似 API 的其他模拟库。

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