我们已经在c#中创建了P2P共享,我想进行一些集成测试,例如测试文件是否从发件人正确下载,检查大小,速度等。
我尝试发送文件,然后检查,但是如果不运行该程序,则无法检查该文件。
有什么想法可以创建一些测试来检查数据吗?
答案 0 :(得分:1)
让我们从集成测试到单元测试的区别开始。而在单元测试中,您将单独测试各个部分(通常是通过模拟依赖关系来实现),而集成测试则是针对更广泛(或完整)的系统进行的。
我假设您要以自动化方式运行集成测试。基本上,您可以使用已在使用的单元测试框架(例如NUnit)运行测试,并且在创建必要的服务时无需使用任何模拟,但可以注入实际的依赖项。
如何精确设置集成测试的“框架”取决于您的项目,例如,如果您使用IoC库注入依赖项,则您也可以在集成测试中使用此框架,而不必手动设置服务。
您还需要注意的事实是,当您运行集成测试时,它可能会影响您正在运行的系统。因此,如果您要在文件系统上执行某些操作,则最好在测试后进行清理。
我建议创建一些适合您的项目以进行集成测试的基本“框架”,其中包括设置测试以与系统一起运行所需的通用代码,并可能在temp目录中创建专用文件夹,该文件夹将在之后被删除。每次测试运行。
现在,您有一个更具体的问题:如果我做对了,您将需要创建一个“发送器”,以提供您要下载的测试文件。作为测试的一部分,您可以将此测试文件部署到上述temp文件夹中,并配置发送方以提供该文件。然后,您可以创建与该发件人进行交互的客户端,并将文件下载到系统上的某个位置。
在开始下载之前,您可以跟踪时间并确定花费了多长时间。另外,您可以在下载完成后检查其属性,或者将其与原始文件进行比较,因为我认为它应该是相同的。
以下一些可能显示一般概念的伪代码:
[TestMethod]
[TestCategory("Integration")
public void DownloadFileFromSender_ConnectionDoesNotGetInterrupted_SuccessfullyDownloadsFile()
{
// Arrange - do the setup of files and temp folders, make create sender and receiver
SetupTestFile(@"Tempfolder\Testfile.txt");
var sender = new Sender(...);
var receiver = new Receiver(...);
sender.ProvideFile(@"Tempfolder\Testfile.txt");
// Act - Put your actual test here
var timeBeforeDownload = DateTime.Now;
receiver.DownloadFile(sender, @"Tempfolder\Testfile.txt", @"Tempfolder\DownloadedFile.txt");
var totalDownloadTime = DateTime.Now - timeBeforeDownload;
// Assert - Verify here your assumptions, e.g. download time or file properties
Assert.IsTrue(totalDownloadTime.TotalMilliseconds < 10000);
Assert.IsTrue(File.Exists(@"Tempfolder\DownloadedFile.txt"));
}
请注意,根据要测试的部件的大小/复杂程度,运行集成测试可能需要更长的时间来设置和运行。它们不替代单元测试,而是对其进行补充。由于它们之间的差异,最好对其进行标记以使其能够运行单元测试或集成测试。
有关如何设置测试环境的详细信息取决于您,并且在很大程度上取决于您要测试的项目。