2013-04-01 65 views
2

我已经在单独的项目中编写了几个单元测试。在开发过程中,我每次都将DLL加载到NUnit.exe中来检查结果。鉴于我已经完成了编写单元测试的工作,如何组织单元测试并将其附加到解决方案。将单元测试附加到C#项目的标准方法

我想在解决方案目录中创建“工具”文件夹,然后放置所有NUnit相关的库,并在测试项目的后期事件中,我迷上了下面的nunit,它的工作原理。

"$(SolutionDir)tools\nunit\nunit-console.exe" "$(TargetPath)" 

但在我的一个测试中,我指的是一个sqlite数据库。如果我硬编码它的位置它工作正常,但我打算把它放在“App_Data”文件夹下的测试项目。所以,我试着用下面的代码来获得相对路径,但它不工作。但是,当我将文件复制到“工具”文件夹时,它工作正常,我猜想执行上下文来自NUnit文件夹。

Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location),"App_Data\\test.txt") 
+3

为什么你的__unit test__读取一个物理文本文件? –

+0

对不起,它是一个单元测试的sqlite数据库文件。 – Sunny

+1

同样的问题适用:为什么你的**单元测试**从实际数据库中读取? –

回答

0

如果没有特别需要的NUnit,你还可利用内置的单元测试Visual Studio支持......这已被纳入到最新的速成版,以及和你没有与这样的问题斗争;)

无论哪种方式,我相信你误解了单元测试的基础知识。我们从不测试一个实际的数据库,这是一个非常糟糕的做法。你应该对这个话题做一些研究,看看mocking背后的理论。

+0

这是用于单元测试的sqlite数据库。应用程序的实际数据库是SQL Server。 – Sunny

+0

@Sundeep,仍然没有真正主张它的使用。如果你决定采用完全不同的方式来存储未来的东西呢?你的单元测试不能依赖于这样的事情......嗯,他们可以,但这不是一个好主意。做你想做的事,我只是觉得这是一个好主意。如果不适合你,也许对于那些关心别人的人。 – walther

+0

我听到你说的话,在我的情况下,设计限制注入模拟值,因为它们与DB层紧密结合。因此,我们更喜欢这种方式,它与内存中的对象相同,但数据是从简单的select语句中提取的,最终映射到DTO中。 – Sunny

相关问题