47

有没有单元测试生成之类的东西?如果是这样的话...

……效果好吗?

...有哪些可用于 .NET 的自动生成解决方案?

...有使用这种技术的例子吗?

...这仅适用于某些类型的应用程序,还是可以用来替代所有手动编写的单元测试?

4

11 回答 11

40

看看Pex。它是微软研究项目。从网站:

Pex 通过基于动态符号执行的自动探索性测试从手写参数化单元测试生成单元测试。

2019 年更新:

如评论中所述,Pex 现在称为IntelliTest,是 Visual Studio 企业版的一项功能。它支持以 MSTest、MSTest V2、NUnit 和 xUnit 格式发出测试,并且它是可扩展的,因此您可以将它与其他单元测试框架一起使用。

但请注意以下警告:

  • 仅支持面向 .NET Framework 的 C# 代码。
  • 不支持 x64 配置。
  • 仅在 Visual Studio企业版中可用
于 2008-09-26T23:31:12.240 回答
23

就 TDD 而言,我相信单元测试生成毫无意义。

您只进行单元测试,以确保您(作为开发人员)在设计和规范方面处于正轨。一旦你开始自动生成测试,它就失去了这个目的。当然,这可能意味着 100% 的代码覆盖率,但这种覆盖率将是毫无意义和空洞的。

自动化单元测试还意味着您的策略是后测试,这与 TDD 的先测试原则相反。同样,TDD 与测试无关。

话虽如此,我相信 MSTest 确实有一个自动单元测试生成工具——我可以在 VS2005 中使用它。

于 2008-09-26T23:32:06.887 回答
20

2017 年更新:

单元测试样板生成器适用于 VS 2015-2017 并且正在维护中。似乎像宣传的那样工作。

于 2017-03-31T16:15:57.847 回答
3

我创建了ErrorUnit. 它从您的暂停或错误日志中生成MSTest或单元测试;到目前为止,模拟类变量、方法参数和 EF 数据访问。请参阅http://ErrorUnit.comNUnitVisual Studio

没有单元测试生成器可以做任何事情。单元测试经典地分为三个部分ArrangeActAssert;Arrange 部分是单元测试的最大部分,它设置了测试的所有先决条件,模拟测试中将要执行的所有数据,单元测试的Act部分通常是一行. 它激活正在测试的代码部分,并传入该数据。最后,测试的Assert部分获取Act部分的结果并验证它是否符合预期(在确保没有错误时可以是零行)。

单元测试生成器通常只能在单元测试创​​建时执行ArrangeAct部分;但是,单元测试生成器通常不会编写Assert部分,因为只有您知道什么是正确的,什么是不正确的。因此,单元测试的一些手动输入/扩展对于完整性是必要的。

于 2016-11-13T02:30:07.817 回答
2

我同意乔恩的观点。某些类型的测试,例如自动模糊测试,肯定会从自动生成中受益。虽然您可以使用单元测试框架的功能来实现这一点,但这并不能实现与良好的单元测试覆盖率相关的目标。

于 2008-09-26T23:42:34.210 回答
2

Parasoft .TEST具有测试生成功能。它使用 NUnit 框架进行测试描述和断言评估。

可以通过自动生成场景(构建输入和调用测试方法)和创建基于当前代码库行为的断言来准备回归测试套件。后来,在被测试的代码库发展之后,断言表明回归或者可以很容易地再次记录。

于 2009-05-22T15:23:52.840 回答
0

我已经使用NStub为我的课程进行测试。它运作良好。

于 2008-09-26T23:39:54.653 回答
0

我已经使用工具来生成测试用例。我认为它适用于更高级别的、面向最终用户的测试。这是用户验收测试的一部分,比纯粹的单元测试更重要。

我使用单元测试工具进行验收测试。它运作良好。

请参阅构建测试用例的工具

于 2008-09-28T00:16:26.913 回答
0

有一个名为 AgitarOne (www.agitar.com) 的商业产品可以自动生成 JUnit 测试类。
我没有使用过它,所以无法评论它的用处,但如果我现在正在做一个 Java 项目,我会看看它。

我不知道 .net 等价物(Agitar 确实宣布了一个 .net 版本,但 AFAIK 它从未实现)。

于 2008-09-30T11:45:33.573 回答
-3

我知道这个线程很旧,但为了所有开发人员,有一个名为 nunit 的好库:

https://marketplace.visualstudio.com/items?itemName=NUnitDevelopers.TestGeneratorNUnitextension

编辑:请使用 XUNIT(微软支持):https ://github.com/xunit/xunit

自动生成的测试: https ://marketplace.visualstudio.com/items?itemName=YowkoTsai.xUnitnetTestGenerator

好的开发者

于 2014-12-30T13:53:46.840 回答
-6

Selenium从网页上的用户命令生成单元测试,非常漂亮。

于 2008-09-30T11:47:49.013 回答