ASP.NET 和 MongoDB - 不在单元测试的上下文中保存
本文关键字:单元测试 上下文 保存 NET MongoDB ASP | 更新日期: 2023-09-27 18:30:39
我是MongoDB的新手,正在设置一个.NET C# MVC项目来尝试一下。
使用来自nuget的当前MongoDB.Driver 2.2.2。
问题:我有一个单元测试成功,但没有将任何数据保存到MongoDB集合。
[TestMethod]
public void TestMethod1()
{
IDatabase<Publisher> context = new MyProject.Data.Concrete.MongoDatabase<Publisher>("Publishers");
Publisher pub = new Publisher()
{
Name = "Test"
};
context.Add(pub);
}
但是,如果我将相同的测试放在MVC控制器下,它将保存数据:
public ActionResult Contact() {
ViewBag.Message = "Your contact page.";
IDatabase<Publisher> context = new MyProject.Data.Concrete.MongoDatabase<Publisher>("Publishers");
Publisher pub = new Publisher()
{
Name = "Test"
};
context.Add(pub);
return View();
}
我很好奇为什么会这样?
下面是 MongoDatabase 类:
public class MongoDatabase<T> : IDatabase<T> where T : class, new()
{
private static string _connectionString = ConfigurationManager.ConnectionStrings["mongodb"].ConnectionString;
private MongoClient _mongoClient = new MongoClient(_connectionString);
private string _collectionName;
private IMongoDatabase _db;
protected IMongoCollection<T> _collection
{
get
{
return _db.GetCollection<T>(_collectionName);
}
set
{
_collection = value;
}
}
public IQueryable<T> Query
{
get
{
return _collection.AsQueryable<T>();
}
set
{
Query = value;
}
}
public MongoDatabase(string collectionName)
{
_collectionName = collectionName;
_db = _mongoClient.GetDatabase(MongoUrl.Create(_connectionString).DatabaseName);
}
public bool Add(T item)
{
var result = _collection.InsertOneAsync(item);
//return result. what can we use here?
return true;
}
public int Add(IEnumerable<T> items)
{
int count = 0;
foreach (T item in items)
{
if (Add(item))
{
count++;
}
}
return count;
}
}
1)你应该改变对异步方法的调用。
public async Task Add(T item)
{
await _collection.InsertOneAsync(item);
}
您可以阅读有关异步的更多信息。
2)
我们在这里可以使用什么?
返回真;
您不需要返回布尔值。您需要在顶层具有异常处理程序。