问题标签 [nunit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
11 回答
4370 浏览

unit-testing - NUnit [TearDown] 失败——什么进程正在访问我的文件?

最终编辑:我找到了问题的解决方案(在问题的底部)。

我有一个让我很伤心的 Nunit 问题。编辑:实际上它看起来更像是一个 SQLite 问题,但我还不是 100% 确定。

我的 TestFixture 有一个设置,它生成一个随机文件名,在我的每个测试中用作 SQLite 数据库。

我的每个测试都在访问数据库的每个方法中使用此构造:

因此,Connect()所有方法都使用一种辅助方法。我假设using() { }构造Dispose()在结束时调用连接TestMethod()并释放与 SQLite 数据库文件的连接。

我遇到的问题在于我的 [TearDown] 方法:

每次测试我都会遇到一个异常:

所有的测试在到达 [TearDown] 时都失败了,所以我最终得到了一个充满临时数据库文件的目录(每个测试一个,每个都有不同的名称)和一大堆失败的测试。

什么进程正在访问该文件?我不明白第二个进程如何访问该文件。在connection我尝试删除文件时,它已完全超出范围并已被 Dispose()d,因此它不能与 SQLite 相关。它可以?

请注意,如果我运行所有测试或仅运行一个测试,我会得到相同的结果。

更新:所以我也尝试了我的 DbCommand 对象的 Dispose()ing,因为我没有这样做(我假设 Dispose()ing DbConnection 的所有其他 ADO.NET 提供程序也 Dispose()s 该连接上的任何命令.) 所以现在它们看起来像:

它没有任何区别—— File.Delete() 行仍然抛出一个 IOException。:-(

如果我删除 [TearDown] 中的那一行,那么我的所有测试都会通过,但我会留下一大堆临时数据库文件。

另一个更新: 这很好用:

我不明白!

更新:找到解决方案:

我通过调试器运行单元测试,当[TearDown]方法启动时,肯定不再有对 SQLite DbConnection 的引用。但是,强制 GC 必须清理它们。SQLite 中一定有一个错误。

0 投票
3 回答
581 浏览

unit-testing - 一段时间后如何使 UnitTest 自动失败?

我正在使用 NUnit (2.4.6),我的构建/测试之夜是使用 Team City 4 完成的。我已经联系了 Team City,他们已经告诉我他们无法处理这个问题。所以,我在这里。

我想要的是设置我的测试以像往常一样进行测试,但如果他们挂断了......由于未知原因(这可能会发生......)......我不希望他们继续但失败. 这是必需的,因为有时我注意到我的构建之夜已经完成,并且当测试到达时,一些测试会挂断整个晚上。

你会怎么做?

请记住,我知道 Nunit 2.5(Beta)具有MaxTime 属性,但我必须升级 + 进行 800 多个单元测试......我想要整个测试的东西,而不必升级到这个 beta 版本。

0 投票
6 回答
1605 浏览

unit-testing - 你如何处理失败的单元测试?

我在一个解决方案文件中有许多项目,它们为它们编写了单元测试,我想将它们设置为由我们的持续集成服务器运行。但是,由于许多测试写得不好并且没有定期运行,所以很多测试都失败了。

我目前没有时间修复所有测试,但我确实相信运行现有测试是有价值的。处理失败的单元测试的最佳方法是什么?

我目前正在做的是将每个失败的测试标记为显式并留下 TODO 评论。

有没有更好的方法来做到这一点?或者我应该先修复所有测试,然后再将它们包含在 CIS 运行的测试中?

0 投票
2 回答
5152 浏览

unit-testing - 在没有 ExpectedException 属性的情况下预期 nUnit 中的异常

我有多个参数的方法,只要任何参数为空,就通过抛出 ArgumentNullExceptions 和 ArgumentExceptions 来防止输入错误。

所以有两种明显的方法来测试这个:

  • 使用 [ExpectedException] 属性对每个参数进行一次测试
  • 使用多个 try{} 捕获块对所有参数进行一项测试

try catch 看起来像这样:

有一个小问题。如果测试通过,Assert.Fail 永远不会被调用,因此将突出显示为未覆盖的测试代码(由 NCover)。

我知道这实际上不是问题,因为它是我想要 100% 覆盖的业务代码,而不是测试代码。我仍然很好奇是否有一种方法可以将多个抛出异常的调用压缩到一个测试用例中而不会有死的 LoC?

0 投票
2 回答
716 浏览

msbuild - 是否可以知道 ReSharper 的测试运行器何时构建我的项目?

我正在尝试使用 MSBuild NUnit 社区任务来强制在每个构建上运行测试,但我现在看到,当我使用 ReSharper 的测试运行器并构建项目时,我运行了两次测试。它有效,但并不是真正可取的。

有谁知道我可以在 MSBuild 中检查的变量或条件,以便如果我知道测试运行程序无论如何都要执行测试,我可以跳过社区任务?

注意:我使用的是 VS2008,MSBuild 脚本与解决方案/项目文件集成在一起。我想要世界上最好的。 CTRL++ ,SHIFT加上B命令行,加上 CI 服务器。

0 投票
6 回答
227 浏览

build - 如何弥补开发机器和构建服务器之间的环境差异?

我在“C:\Program Files\NUnit 2.4.8\”的机器上安装了 NUnit,但在我的集成服务器(运行 CruiseControl.Net)上,我将它安装在“D:\Program Files\NUnit 2.4.8\”中. 问题是在我的开发机器上我的 NAnt 构建文件可以正常工作,因为在任务中我使用路径“C:\Program Files\NUnit 2.4.8\bin\NUnit.Framework.dll”来添加对'的引用NUnit.Framework.dll' 程序集,但这个相同的构建文件无法在我的集成服务器上构建文件(因为引用路径不同)。我是否必须将 NUnit 安装在与集成服务器相同的位置?这个解决方案对我来说似乎太严格了。有没有更好的?这类问题的一般解决方案是什么?

0 投票
4 回答
22694 浏览

.net - NUnit“无法加载文件或程序集'MyTestProject'

我正在设置一个新的 64 位机器作为构建服务器运行。当我尝试将我的 NUnit 测试程序集加载到 NUnit GUI 中时,出现以下错误。

没有什么明显的缺失,所有的依赖似乎都存在。所有的 DLL 都是为 x86 平台编译的。

使用 NUnit 2.4.7。我尝试升级到 2.4.8,但出现同样的错误。

System.IO.FileNotFoundException:无法加载文件或程序集“MyTestProject”或其依赖项之一。该系统找不到指定的文件。

System.IO.FileNotFoundException...

0 投票
8 回答
14441 浏览

.net - Windows 窗体的 Visual Studio 单元测试

我们正在使用 Visual Studio 2008 开发一个项目。我们正在使用随它提供的内置测试套件(Microsoft.VisualStudio.TestTools.UnitTesting 命名空间)。事实证明,让我们非常懊恼的是,大量的复杂性(以及因此的错误)最终被编码到我们的 UI 层中。虽然我们的单元测试在覆盖我们的业务层方面做得不错,但我们的 UI 层一直是令人恼火的来源。理想情况下,我们也希望对其进行单元测试。有谁知道在视觉工作室中这样做的一种很好的“微软兼容”方式?它是否会引入某种冲突以将诸如nUnitForms之类的单元测试框架与 Microsoft 的东西“混合”在一起?对于单元测试表格,我应该注意哪些明显的陷阱?

0 投票
5 回答
250 浏览

java - 创建 nunit 测试而不使用 api 导出它们

我是使用 nunit(以及一般的 Java 开发)进行单元测试的新手。在为类上的私有方法创建单元测试时,看起来测试文件必须与被测试的类在同一个包中。避免导出单元测试 API 的典型方法是什么?我可以使类/测试方法受包保护吗?还是开发人员通常有一个单独的发布版本,不包括单元测试文件?

0 投票
3 回答
1208 浏览

.net - 在数据库事务中自动包装单元测试?

[编辑(哈伦):重复]

我正在寻找一种将我的 NUnit 集成测试自动包装在数据库事务中的方法,以便在测试结束时自动回滚测试所做的更改。理想情况下,我会用自定义属性装饰某些测试方法,这会导致 NUnit 在测试开始时创建事务并在测试结束时回滚...我可以编写属性,但我不知道在哪里添加检查它。

测试数据库大小为 3GB,因此无法在每次测试开始时恢复它。我知道我可以在每个测试的主体中手动创建一个事务,但我正在寻找更优雅的东西。

也许有一个 IL 重写工具(也许是 AOP 框架)可以为我做到这一点?有人有什么建议吗?