簡體   English   中英

當 mocking 使用 Moq 時,模擬返回 null

[英]Mock returns null when mocking using Moq

我可能在這里遺漏了一些明顯的東西。 使用 Asp.Net 核心后台服務。 簡化的設置如下:

蘇特

public class OrderService: BaseOrderService 
{
    IConsumer<string, string> _consumer;

    public OrderService(IBuilder consumerBuilder, ILogger logger) : base(logger)
    {
        _consumer = consumerBuilder.Build(() => Provider);
    }
}

public abstract class BaseOrderService: BackgroundService
{
    protected BaseOrderService(ILogger logger){}

    ....
    ....
}

構建器

public interface IBuilder
{
    IConsumer<string, string> Build(Func<string> providerFunc);
}

單元測試

[Fact]
public async Task TestDescription()
{
    var mockBuilder = new Mock<IBuilder>();
    var mockConsumer = new Mock<IConsumer<string, string>>();
    mockBuilder.Setup(x => x.Build(It.IsAny<string>)).Returns(mockConsumer.Object);

    var sut = new OrderService(mockBuilder.Object, NullLogger.Instance);
    await sut.StartAsync(default);
    ....
    ....
}

問題

  • 在運行我的測試時,在 OrderService 構造函數中,調用_consumer = _consumerBuilder.Build(()=> Provider)返回null ,盡管我在測試中提供了模擬設置。

我錯過了什么? 任何指針將不勝感激。

使用了錯誤的參數匹配器。

被模擬的成員期望Func<string>

IConsumer<string, string> Build(Func<string> providerFunc);

但是您的代碼設置It.IsAny<string>

mockBuilder
    .Setup(x => x.Build(It.IsAny<string>)) //<-- WRONG
    .Returns(mockConsumer.Object);

應該是It.IsAny<Func<string>>()

 mockBuilder
    .Setup(x => x.Build(It.IsAny<Func<string>>())) //<--
    .Returns(mockConsumer.Object);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM