【问题标题】:Standard way to attach unit tests to a C# project将单元测试附加到 C# 项目的标准方法
【发布时间】:2013-04-02 06:26:38
【问题描述】:

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

我尝试在解决方案目录中创建“工具”文件夹,然后放置所有与 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")

【问题讨论】:

  • 为什么您的单元测试会读取物理文本文件?
  • 对不起,它是一个用于单元测试的 sqlite db 文件。
  • 同样的问题也适用:为什么您的单元测试从实际数据库中读取?
  • 这是一个sqlite数据库,实际数据库是SQL Server。 Sqlite 数据库包含单元测试所需的数据。

标签: c# unit-testing nunit


【解决方案1】:

如果您不需要专门的 nunit,您也可以使用内置的 Visual Studio 支持进行单元测试...它也已合并到最新的 Express 版本中,您不必为问题而苦苦挣扎像这样;)

无论哪种方式,我相信您都误解了单元测试的基础知识。我们从不针对实际数据库进行测试,这是一种非常糟糕的做法。您应该对该主题进行一些研究,并了解 mocking 这样的东西背后的理论。

【讨论】:

  • 这是一个仅用于单元测试的 sqlite 数据库。应用程序的实际数据库是 SQL Server。
  • @Sundeep,仍然不提倡使用它。如果您决定将来使用完全不同的方式来存储东西怎么办?您的单元测试不能依赖于这样的东西......嗯,他们可以,但这不是一个好主意。做你想做的,我只是觉得指出这一点也是个好主意。如果不是为了你,也许是为了其他关心的人。
  • 我听到了你所说的,在我的情况下,设计限制注入模拟值,因为它们与 DB 层紧密耦合。因此,我们更喜欢这种方式,它与内存中的对象相同,但数据是从简单的选择语句中提取的,最终映射到 DTO。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 2011-12-07
相关资源
最近更新 更多