簡體   English   中英

Moq 如何驗證通用功能參數?

[英]How does Moq verify Generic Func Parameter?

給定

public interface IService
{
  void Run<T>(T value, Func<T, string> func);
}

public class Sut
{
  private readonly IService m_service;

    public Sut(IService service)
    {
        m_service = service;
    }

    public void Test()
    {
        Point point = new Point {X = 1, Y = 2};
        m_service.Run(point, p => $"X:{p.X}, Y:{p.Y}");
    }
}

internal class Point
{
    public int X { get; set; }
    public int Y { get; set; }
}

並經過測試

[Test]
public void RunTest()
{
    // Arrange
    Mock<IService> mockService = new Mock<IService>();
    var sut = new Sut(mockService.Object);

    // Act
    sut.Test();

    // Assert
    mockService.Verify(e => e.Run(It.IsAny<It.IsAnyType>(), It.IsAny<Func<It.IsAnyType, string>>()), Times.Once);
}

此測試將失敗,由於 Point 是第三方內部 class,我無法在驗證中使用It.IsAny<Point>

如果我將 Point 更改為 public 並驗證以下使用情況,它運行良好。

mockService.Verify(e => e.Run(It.IsAny<Point>(), It.IsAny<Func<Point, string>>()), Times.Once);

任何幫助,將不勝感激

通常,您希望在被測程序集中放置一個InternalsVisibleTo屬性,指向測試程序集。

有關參考信息,請參見此處

暫無
暫無

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

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