Sql server MVC项目中的测试功能
所以我想在我的Web项目中测试我的一个功能,但是它实际上并没有连接到项目中的任何东西,而其他人正在处理这个部分。该函数接收一个ID字段,然后离开并执行一些查询和获取一些数据,对其执行一些计算,然后将一组行写入文件流并返回该流。我几乎只想通过让它在本地将文件写入我自己的计算机,并在函数完成后使用该文件目录来测试它 所以我的问题主要是: 1我如何调用此函数仅用于测试目的,这样我就可以测试所有查询/计算/文件写入等,而无需将其连接到应用程序的其他部分 2如何更改FileStream的“Return fs”以在本地写入我自己的计算机以查看已写入的文件Sql server MVC项目中的测试功能,sql-server,asp.net-mvc,vb.net,filestream,Sql Server,Asp.net Mvc,Vb.net,Filestream,所以我想在我的Web项目中测试我的一个功能,但是它实际上并没有连接到项目中的任何东西,而其他人正在处理这个部分。该函数接收一个ID字段,然后离开并执行一些查询和获取一些数据,对其执行一些计算,然后将一组行写入文件流并返回该流。我几乎只想通过让它在本地将文件写入我自己的计算机,并在函数完成后使用该文件目录来测试它 所以我的问题主要是: 1我如何调用此函数仅用于测试目的,这样我就可以测试所有查询/计算/文件写入等,而无需将其连接到应用程序的其他部分 2如何更改FileStream的“Return f
谢谢大家 您需要仔细阅读单元测试,因为它可以通过多种方式解决您的问题-它还将向您介绍依赖项注入和模拟,这将是处理您的问题的一种很好的方式 这里是一个概述 设置类,使其接受构造函数中的数据访问和文件编写器。然后,您可以传入数据访问和文件编写器的模拟或存根版本,这样您就不需要连接到数据库或写入文件系统来测试代码 在现实世界中,您需要传递真正的数据访问和文件编写器 在测试世界中,您使用诸如MOQ或Rhino Mock之类的工具来创建数据访问的假装版本,这意味着您可以预测每次测试时数据访问将返回什么,因为它不是真实的数据库,而是您准备的一些数据。您还可以创建一个实际上不需要编写真实文件的假装文件编写器 然后可以单独测试类 依赖项注入: 最小起订量
要使函数可测试,您需要隔离所有依赖项,并在测试中用存根模拟替换它们。您可以通过包装文件系统类并确保数据层类具有接口来实现这一点。使用此选项,您的代码可以如下所示:
public class Something
{
IDataProvider provider;
IFileSystem fileSystem;
public Something(IDataProvider provider, IFileSystem fileSystem)
{
this.provider = provider;
this.fileSystem = fileSystem;
}
void DoThing(int id)
{
// make database call to get data
var data = provider.GetData(id);
fileSystem.Write("someFilePath",data);
}
}
有了它,您可以使用类似的语法在此外壳中编写测试:
void SomeTest()
{
var mockDataProvider = new Mock<IDataProvider>();
var mockFileSystem = new Mock<IFileSystem>();
var something = new Something(mockDataProvider.Object, mockFileSystem.Object);
var data = "someData";
mockDataProvider.Setup(x => x.GetData(5)).Return(data);
DoThing(5);
mockFileSystem.Verify(x => x.Write("someFilePath",data);
}