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

ASP.NET 和 MongoDB - 不在单元测试的上下文中保存

1)你应该改变对异步方法的调用。

public async Task Add(T item)
{
    await _collection.InsertOneAsync(item);
}

您可以阅读有关异步的更多信息。

2)

我们在这里可以使用什么?
返回真;

您不需要返回布尔值。您需要在顶层具有异常处理程序。