MOQ-为什么下面不嘲讽

本文关键字:为什么 MOQ- | 更新日期: 2023-09-27 18:26:39

有人知道为什么下面仍然调用YesService吗?

似乎IYesService与YesService是分开的。。

有什么想法吗?

public interface IYesService
{
    string Hello();
}
public class YesService : IYesService
{
    public string Hello()
    {
        return "Yes";
    }
}
class Program
{
    static void Main(string[] args)
    {
        var _mock = new Mock<IYesService>();
        _mock.Setup(x => x.Hello()).Returns("No");
        var service = new YesService();
        var result = service.Hello();
        Console.Write(result);
        Console.ReadLine();
    }
}

MOQ-为什么下面不嘲讽

因为不使用_mock,所以实例化YesService并调用其上的方法。

当你消费这个界面时,你可以使用mocking:

public class ServiceUser
{
    private IYesService _yesService;
    public ServiceUser(IYesService yesService)
    {
        _yesService = yesService;
    }
    public string CallService()
    {
        return _yesService.Hello();
    }
}

然后这样使用:

var serviceMock = new Mock<IYesService>();
serviceMock.Setup(x => x.Hello()).Returns("No");
var service = new ServiceUser(serviceMock.Object);
var result = service.CallService();

您正在Main方法中创建YesService(具体类)的实例。var服务行可以取消,var结果行应该变成:

var result = _mock.Object.Hello();

试试看。。。