Asp.net 单元测试项目:;在应用程序配置文件“中找不到连接字符串”;
我有一个现有的MVC5网络应用程序。我刚刚创建了一个新的单元测试项目,并添加了以下代码Asp.net 单元测试项目:;在应用程序配置文件“中找不到连接字符串”;,asp.net,unit-testing,visual-studio-2015,Asp.net,Unit Testing,Visual Studio 2015,我有一个现有的MVC5网络应用程序。我刚刚创建了一个新的单元测试项目,并添加了以下代码 using Microsoft.VisualStudio.TestTools.UnitTesting; using SomethingApp.Services; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using SU
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SomethingApp.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SUT = SomethingApp.Services.ReportingServices; // SUT = System Under Test
namespace SomethingApp.Services.Tests
{
[TestClass]
public class GettingScoreForQuestionShould
{
[TestMethod]
public void ReturnScoreWhenGivenValidData()
{
// Arrange
int eventId = 39;
int questionId = 271;
decimal score;
// Act
score = SUT.GetScoreForQuestion(eventId, questionId);
// Assert
Assert.AreEqual("80",score);
}
}
}
当GetScoreForQuestion方法在普通web应用程序中运行时,它运行得非常完美。但是,当我通过测试方法运行它时,我得到了这个错误
消息:测试方法SomethingApp.Services.Tests.GettingScoreForQuestionShould.ReturnScoreWhenGivenValidData
引发异常:System.InvalidOperationException:无连接字符串
在应用程序配置文件中可以找到名为“myDbContext”的文件
当然,错误来自GetScoreForQuestion方法,该方法在普通web应用程序中运行良好
我不明白为什么我需要向测试项目添加一个应用程序配置文件和这个配置连接字符串。看起来,因为我在MVC项目中调用了这个方法,所以它有责任建立连接并完成它的事情(这是在应用程序的正常过程中完成的)。我是不是弄错了什么
并且,我尝试向单元测试项目添加一个新的application.config文件和连接字符串,但是在构建之后,测试方法将不再显示在测试资源管理器中。有什么建议吗?谢谢
更新****
下面是GetScoreForQuestion(有问题的方法,在web应用程序中可以正常工作,但在通过测试方法调用时不能正常工作)的代码
Db在与…相同的类中声明
public static class ReportingServices
{
private static readonly ThingyContext Db = new ThingyContext();
看起来您可能正在ReportingServices类中创建新的ThingyContext。研究注入接口,以便可以用模拟实现代替测试目的 以下是一些帮助您入门的链接:
看起来您可能正在ReportingServices类中创建新的ThingyContext。研究注入接口,以便可以用模拟实现代替测试目的 以下是一些帮助您入门的链接:
当您执行单元测试时,该项目就是您正在运行的应用程序。这就是从中读取配置文件的位置。请注意,您需要的是app.config,而不是web.config。当您执行unittest时,该项目就是您正在运行的应用程序。这就是从中读取配置文件的位置。请注意,您需要的是app.config,而不是web.config。您可以发布GetScoreForQuestion方法吗?@ovation22我更新了OP。Db.ThingyResults在哪里声明?你能提供一个模拟实例吗?你到底想测试什么?您应该在不点击数据库的情况下测试应用程序的逻辑。@ovation22我在OP中添加了您的答案。是的,我认为在我的测试项目中,我不需要任何db内容,因为我只是在MVC应用程序中调用一个方法,它将处理db内容。这就是我困惑的原因。你能发布GetScoreForQuestion方法吗?@ovation22我更新了OP。Db.ThingyResults在哪里声明?你能提供一个模拟实例吗?你到底想测试什么?您应该在不点击数据库的情况下测试应用程序的逻辑。@ovation22我在OP中添加了您的答案。是的,我认为在我的测试项目中,我不需要任何db内容,因为我只是在MVC应用程序中调用一个方法,它将处理db内容。这就是我困惑的原因。谢谢@HansKesting谢谢@HansKesting
public static class ReportingServices
{
private static readonly ThingyContext Db = new ThingyContext();