Xunit 测试不适用于 mongodb 服务

Xunit test not working for mongodb service

我想做一个小的 XUnit 测试,但它不工作。 (AddTest 有效但 GetAllRestaurantsCountShouldReturnThree 无效。)

我是单元测试的新手,我不知道 Moq 以及如何使用它。

如何模拟我的 IMongoService 并获取餐厅数量?

MongoService.cs

public class MongoService : IMongoService
{

    private readonly IMongoDatabase _mongoDatabase;
    private readonly IMongoClient _mongoClient;

    public MongoService()
    {
        _mongoClient = new MongoClient("mongodb://localhost:27017");
        _mongoDatabase = _mongoClient.GetDatabase("Restaurant");
    }

    public List<RestaurantDto> GetAllRestaurants()
    {
        var collection = _mongoDatabase.GetCollection<RestaurantDto>("Restaurant");
        return collection.Find(_ => true).ToList();
    }
}

MongoServiceTest.cs

public class ReviewServiceTests
{
    private List<RestaurantDto> _allRestaurants = new List<RestaurantDto>()
    {
        new RestaurantDto() {Name="xxx", ZipCode = "111" },
        new RestaurantDto() {Name="yyy", ZipCode = "222" },
        new RestaurantDto() {Name="zzz", ZipCode = "333" },
    };

    [Fact] //Not Working
    public void GetAllRestaurantsCountShouldReturnThree()
    {

        var _mongoService = new Mock<IMongoService>();
        _mongoService.Setup(x => x.GetAll()).Returns(_allRestaurants );
        var count = _mongoService.GetAll(); //GetAll() not seeing

        Assert.Equal(count, 3);

    }

    [Fact] //Working
    public void AddTest()
    {
        Assert.Equal(10, Add(8, 2));
    }

    int Add(int a, int b)
    {
        return a + b;
    }
}

您使用的最小起订量不正确

[Fact]
public void GetAllRestaurantsCountShouldReturnThree() {

    var mock = new Mock<IMongoService>();
    mock.Setup(x => x.GetAllRestaurants()).Returns(_allRestaurants);

    IMongoService mongoService = mock.Object;

    var items = mongoService.GetAllRestaurants(); //Should call mocked service;
    var count = items.Count;

    Assert.Equal(count, 3);

}

阅读有关如何在 Quickstart

中使用 Moq 的信息