自动生成.NET单元测试

时间:2008-09-26 23:28:21

标签: c# .net unit-testing automation automated-tests

是否存在单元测试生成这样的事情?如果是的话......

......它运作良好吗?

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

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

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

12 个答案:

答案 0 :(得分:28)

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

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

答案 1 :(得分:17)

我认为,就TDD而言,单元测试生成没有意义。

您只进行单元测试,以确保您(作为开发人员)对设计和规格有所了解。一旦开始自动生成测试,它就会失去这个目的。当然,它可能意味着100%的代码覆盖率,但这种覆盖范围将毫无意义且空洞。

自动化单元测试也意味着您的策略是测试后的,这与TDD的测试之前的原则相反。同样,TDD不是关于测试。

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

答案 2 :(得分:15)

2017年更新:

Unit Test Boilerplate Generator适用于VS 2015-2017,并且正在维护中。似乎像宣传的那样工作。

答案 3 :(得分:2)

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

没有单元测试发生器可以做任何事情;单元测试经典地分为三个部分:安排,行动和断言;排列部分是单元测试的最大部分,它设置了测试的所有前提条件,模拟了测试中将要执行的所有数据,单元测试的Act部分通常是一行并激活被测试的代码部分传入该数据,最后测试的Assert部分获取Act部分的结果并验证它是否符合预期(当确保没有错误时可以为零行。)

单元测试生成器通常只能执行“安排”和“行动”。单元测试创​​建的部分;但单元测试生成器通常不会写“断言”。部分只有你知道什么是正确的,什么是不正确的你的目的。因此,为了完整性,必须手动输入/扩展单元测试。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

可以通过自动生成方案(构造输入和调用测试方法)和创建基于当前代码库行为的断言来准备回归测试套件。之后,在测试代码库发展之后,断言表示回归或可以轻松再次记录。

答案 6 :(得分:0)

我使用NStub来验证我的课程的测试。它运作得相当好。

答案 7 :(得分:0)

我使用工具生成测试用例。我认为它适用于更高级别,面向最终用户的测试。这是用户验收测试的一部分,而不是纯单元测试。

我使用单元测试工具进行验收测试。效果很好。

请参阅Tooling to Build Test Cases

答案 8 :(得分:0)

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

我不知道.net等价物(Agitar有人宣布.net版本,但AFAIK从未实现)。

答案 9 :(得分:0)

我知道这个线程很老但是为了所有开发人员,有一个很好的库叫做单元测试生成器:

https://visualstudiogallery.msdn.microsoft.com/45208924-e7b0-45df-8cff-165b505a38d7

Good dev

答案 10 :(得分:0)

GennyMcGenFace为您班级中的每个函数创建单元测试,并在每个参数中生成具有随机单词/值的对象。

  • 为班级中的每个功能生成单元测试
  • 计算出参数输入和退货声明的有效随机生成值。
  • Mockable接口返回有效的随机生成值
  • 为班级中的每个功能生成单元测试
  • 将所有需要的命名空间导入测试类

它有助于设置单元测试,尤其是当您有大量参数的输入对象时。

单元测试看起来像这样

答案 11 :(得分:-4)

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