【问题标题】:mongoclient is always null when mocking mongodb模拟 mongodb 时,mongoclient 始终为空
【发布时间】:2021-09-01 14:23:26
【问题描述】:
[TestClass]
public class MyTests
{        
    private CarsContext carsContext;
    private Mock<IMongoDatabase> _mockDB;
    private Mock<IMongoClient> _mockClient;
    
    [TestInitialize]
    public void Setup()
    {
     _mockClient = new Mock<IMongoClient>();
     _mockDB = new Mock<IMongoDatabase>();
     db = Guid.NewGuid().ToString();
     _mockClient.Setup(c => c.GetDatabase(db, null)).Returns(_mockDB.Object);

     carsContext = new CarsContext(_mockClient.Object, db);
    }
    
    [TestMethod]
    public async Task TestOne()
    {
        var objToInsert = new Car{ ... };

        //always null (carsContext Client is always null and db property is populated with Mocked object.
        var cars =  carsContext.GetCollection<Car>("cars"); 
        cars.InsertOne(objToInsert);
    }   
}   


public class Car : Entity
{
    public string Name {get; set;}
    ...
}

public class CarContext : ICarContext
{
    private readonly IMongoDatabase _db;
    
    public IMongoClient MongoClient
    {
        get { return _db.Client; } // always null
    }
    
    public CarContext(IMongoClient mongoClient, string db)
    {
        _db = mongoClient.GetDatabase(db); // _db.Client is always null
    }
}
    

【问题讨论】:

  • 您没有设置您的 _mockDB 实例以从 Client 属性返回您的模拟客户端。

标签: c# .net mongodb unit-testing


【解决方案1】:

您需要设置您传入的_mockDB 以返回一个集合:

var collectionMock = new Mock<IMongoCollection<Car>>();
_mockDB.Setup(c => c.GetCollection<Car>("cars")).Returns(collectionMock.Object);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    相关资源
    最近更新 更多