当前位置: 首页 > 知识库问答 >
问题:

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

阎功
2023-03-14

我是MongoDB的新手,正在建立一个新的应用程序。NETC#MVC项目来尝试一下。

使用当前的MongoDB。nuget的驱动程序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个答案

商飞龙
2023-03-14

1)您应该更改异步方法的调用

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

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

2)

//返回结果。我们在这里可以用什么
返回true;

你不必还布尔。您需要在顶层有异常处理程序。

 类似资料:
  • 我使用的是spring boot 1.4.4,我有一个测试类,比如: 这是我的application.yml: application.yml是读取的,因为我将该值存储在字符串路径值中,conf.json位于/src/main/resources和/src/test/resouces中 但我要做什么:mapper.readtree(新URL(路径));我得到错误:文件找不到。 我试过:“class

  • 在单元测试中启动和正常关闭Spring应用程序的推荐方法是什么?我知道JUnit5的SpringExtension,但它在测试方法执行之前/之后启动和停止Spring上下文。 我想用测试方法启动和停止spring上下文,因为我想验证是否调用了某些方法(尤其是在关机期间)。 有没有推荐的方法来实现这一点?

  • 我想不通..出于某种原因,Spring Junit没有将我的bean添加到上下文中。请砰!! 由:org.springframework.beans.factory.nosuchBeanDefinitionException引起:没有类型为“com.api.demo.store.FileStorage”的合格bean可用:需要至少有1个bean作为autowire候选bean。依赖项注释:{@or

  • 问题内容: 我试图从动作中返回Json,之后IE尝试下载它并显示保存对话框。我在Firefox中对其进行了测试,并且可以正常运行。 这种行为的原因是什么,我该如何解决? 之后在Javascript部分中我尝试 但是IE仍然不会显示警报。它带给我保存对话框。 我尝试进行更改,并且保存对话框消失了,但是还无法看到警报。我想念什么? 编辑: 这是我的全能Javascript,我使用Valums qqup

  • 我正在为cadence活动功能编写一个单元测试,它使用UUID从联系服务中检索联系人。我想知道我应该把什么样的背景加入到节奏活动中。 这是测试功能。 我收到的错误消息:

  • 本文向大家介绍详解.Net单元测试方法,包括了详解.Net单元测试方法的使用技巧和注意事项,需要的朋友参考一下 1、测试异常 可以直接对方法进行异常测试,也可以对模拟对象进行异常测试,但是,对模拟对象进行异常测试,很少用,所以,这里就介绍对方法的异常测试。请看如下代码,当用户名为空的时候,抛出异常。 例如 测试代码如下 2、测试返回值 这里用到了一个LastCall的一个类,比较常用,一些辅助测试