Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server MVC项目中的测试功能_Sql Server_Asp.net Mvc_Vb.net_Filestream - Fatal编程技术网

Sql server MVC项目中的测试功能

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

所以我想在我的Web项目中测试我的一个功能,但是它实际上并没有连接到项目中的任何东西,而其他人正在处理这个部分。该函数接收一个ID字段,然后离开并执行一些查询和获取一些数据,对其执行一些计算,然后将一组行写入文件流并返回该流。我几乎只想通过让它在本地将文件写入我自己的计算机,并在函数完成后使用该文件目录来测试它

所以我的问题主要是:

1我如何调用此函数仅用于测试目的,这样我就可以测试所有查询/计算/文件写入等,而无需将其连接到应用程序的其他部分

2如何更改FileStream的“Return fs”以在本地写入我自己的计算机以查看已写入的文件


谢谢大家

您需要仔细阅读单元测试,因为它可以通过多种方式解决您的问题-它还将向您介绍依赖项注入和模拟,这将是处理您的问题的一种很好的方式

这里是一个概述

设置类,使其接受构造函数中的数据访问和文件编写器。然后,您可以传入数据访问和文件编写器的模拟或存根版本,这样您就不需要连接到数据库或写入文件系统来测试代码

在现实世界中,您需要传递真正的数据访问和文件编写器

在测试世界中,您使用诸如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);


}