Moq如何验证泛型函数参数



给定

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是第三方内部类,我无法在验证中使用It.IsAny<Point>

如果我将Point更改为public并验证use following,那么它运行良好。

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

如有任何帮助,将不胜感激

通常,您希望将InternalsVisibleTo属性放在要测试的程序集中,指向测试程序集。

请参阅此处以获取参考信息。

最新更新