SangoBg
SangoBg

Reputation: 23

Xunit test not working for mongodb service

I want to make a small XUnit test but it is not working. (AddTest is working but GetAllRestaurantsCountShouldReturnThree not working. )

I am new to unit testing and I don't know about Moq and how to use it.

How can I mock my IMongoService and get restaurant count?

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;
    }
}

Upvotes: 2

Views: 1177

Answers (1)

Nkosi
Nkosi

Reputation: 247333

You are using Moq incorrectly

[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);

}

Read up on the how to use Moq in their Quickstart

Upvotes: 2

Related Questions