【问题标题】:unit test error because connection string retunes null单元测试错误,因为连接字符串重新调整 null
【发布时间】:2021-10-31 18:20:28
【问题描述】:

我正在尝试编写单元测试,我已将我的应用程序设置复制到我的测试项目中,它包含我到 mongo db 的连接字符串,但是一旦我运行测试,我得到 System.ArgumentNullException:值不能为空。 (参数'connectionString'),

这是我的测试:

 public Mock<IDataService> mock = new Mock<IDataService>();

    [Fact]
        void TestCase1()
        {

        var stocksTemp = new List<StockData>{

                    new StockData {
                        BaseCurrency = "EUR",
                        NumberOfShares = 150,
                        Ticker = "KINV"
                    }
                };

        var tt = new PortfolioData()
        {
            CurrentTotalValue = 200121,
            Stocks = stocksTemp
        };

        var nn = new PortfolioData();

       var result= mock.Setup(p => p.GetPortfolio("61377666d24fd78398a5a558")).ReturnsAsync(nn);

        Assert.True(tt.Equals(result));

        }

    }
}

【问题讨论】:

  • DataService.GetPortfolio 在内部做什么?
  • DataService 是我编写代码以联系 db 并获取数据的地方
  • 对,但是你能在你的帖子中分享那个代码吗?看看这个类是什么样子对我们很有帮助。
  • @MattU 更新了问题
  • 这个测试到底应该做什么?专注于此。当您想编写单元测试时,为什么要查看连接字符串和 appSettings?您走错了路,您要编写的不是单元测试,而是不会帮助您编写更好的代码的东西。

标签: c# unit-testing asp.net-core


【解决方案1】:

问题是您将 appsetting 文件复制到了单元测试项目,但您没有从该文件中读取任何内容。在 AspNetCore 项目中,他们编写了代码来读取 appsetting 中的值,但单元测试项目并非如此。您需要手动阅读。

// Packages: Microsoft.Extensions.Configuration.Json and Namespace: Microsoft.Extensions.Configuration
var config = new ConfigurationBuilder()
                 .AddJsonFile("appsettings.json")
                .Build();
IPortfolioDatabaseSetting _dataBseMock = config.GetSection("SectionName")
                                        .Get<PortfolioDatabaseSetting>() // Use actual class not interface

如果你不需要使用appsetting那么可以直接创建一个新的PortfolioDatabaseSetting实例,并直接将连接字符串添加到属性中

IPortfolioDatabaseSetting _dataBseMock = new PortfolioDatabaseSetting { ConnectionString = "YouActualConnectionString" }

【讨论】:

  • 我需要在我的单元测试项目中编写它吗?我也应该在我的单元测试项目中复制应用程序设置吗?
  • @masali 是的,如果没有,您可以直接创建PortfolioDatabaseSetting 的新实例并将连接字符串直接添加到属性中
  • @masali 当你说“我已经在我的测试项目中复制了我的应用设置”时,我假设你已经复制了
猜你喜欢
  • 2011-08-01
  • 1970-01-01
  • 2012-12-24
  • 2012-08-12
  • 1970-01-01
  • 2019-11-18
  • 1970-01-01
  • 2019-08-13
  • 1970-01-01
相关资源
最近更新 更多