c# - 模拟 mongodb 时,mongoclient 始终为空
问题描述
[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
要传入的内容以返回集合:
var collectionMock = new Mock<IMongoCollection<Car>>();
_mockDB.Setup(c => c.GetCollection<Car>("cars")).Returns(collectionMock.Object);
推荐阅读
- java - 有没有办法使用 android 的 Play Core 安装本地 apk?
- c++ - 代表被摧毁
- r - 如何在 R Shiny 中测量 HTML 字符串的宽度(以像素为单位)?
- python - 如何将python添加到html中?
- python - 如何安装 pip 而不会出错?
- flyway - Flyway Locations 属性未设置
- javascript - 在 react-native 中将 pdf 文件从存储上传到 firebase
- python - pgAdmin Postgresql 用户输入条件
- python - 如何从用户 id discord.py 中获取 Member 对象
- python - 有没有办法让抓取脚本暂停用户手动登录网站,然后继续抓取网站?