![](/img/trans.png)
[英]Using Moq to Mock a Func<> constructor parameter and Verify it was called twice
[英]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.