单元测试:从哪里开始编写我的第一次测试

时间:2017-05-10 17:45:59

标签: c# jquery .net unit-testing nunit

我的问题是,代码库中的一个简单的位置是什么,开始编写单元测试,这样我就可以开始学习一些基本技能了?

细节: 我是最近聘请的初级开发人员,我的任务是将单元测试添加到我公司的项目中。我已经安装了NUnit,观看了教程,完成了基本的样本,并正在阅读官方文档。我可以看到自动化单元测试的价值,并认为这是熟悉我公司源代码的好方法。

我们有2个在线平台,一个“宣传册”网站,以吸引客户和我们的“数据库”网站。两者都写在Javascript,jQuery,C#,.NET中,通过Entity框架连接到MSSQL。 “宣传册”网站内置的用户功能不多。他们点击链接即可获取信息页面。并且有一个联系请求表单,他们提交基本信息,以便我们联系他们。非常简单的网站。 “数据库”更复杂。注册用户可以从不同的数据库中获取任意数量的数据组合,有各种级别的注册涉及访问权限。根据用户选择进行大量过滤。

目前还没有任何测试,但它们都在生产中。哪里开始的好地方? 我想我应该从简单的“宣传册”网站开始学习,但我确实认为测试对于“数据库”网站来说是长期的。

我应该尝试测试控制器,ajax get / post功能,视图吗? 我想我所希望的是有人说“这些1,2,3是简单的测试,从那里开始”如果我对这个想法有误,请告诉我。谢谢。

2 个答案:

答案 0 :(得分:0)

首先:需要考虑不同类型的测试。 一般的单元测试用于测试小型单元(例如功能)。 因此,在类/模块中为每个复杂函数编写测试(无需测试getter和setter或类似的东西)可能是一个很好的起点。应该模拟对数据库或其他外部服务(例如API)的调用。

你可以创建一个文件夹/子项目" tests"在项目的根文件夹中。此测试文件夹的结构应该类似于您的代码项目源,以便于在代码项目中查找特定类的测试类/文件。

稍后您可以(并且应该)考虑集成测试。这是您可以连接到您的数据库或其他外部服务。

答案 1 :(得分:0)

如果应用程序目前没有单元测试,那么很可能它们不会立即“可测试”。换句话说,它们可能不是由可以进行单元测试的较小类和方法构建的。这两者是相辅相成的。编写单元测试的人试图编写可测试的代码。

您可能需要重构一点才能编写单元测试。一种方法是寻找“低挂水果” - 重构更容易的领域。

例如,是否存在大量重复代码?您可以编写一个提供某些功能的类,并使用对该类的引用替换这些方法。现在您可以对该类进行单元测试。

或者,一个班级是否有大量的私人方法,所有这些方法都与表格的主要目的无关?没有办法对这些私有方法进行单元测试,但你可以将它们分解为自己的类。

在最长的时间里,我认为重构意味着重新设计代码以使用依赖注入或重写类依赖于抽象,这使得它看起来势不可挡。我最近读了一些改变了我对此的看法。 Here it is。该文章的标题是“以可测试性的名义侵入遗留代码。”

要点就是这个(或者至少是我记得的):假设我们有一个调用一堆私有方法的类,并且该类是不可测试的。我们可以将该方法放在它自己的类中,重构它以使其可测试,然后为它编写单元测试。

然后,在我们原来的课堂上,我们改变了

DoSomethingInAPrivateMethod();

var doesSomething = new DoesSomething();
doesSomething.DoSomething();

现在我们可以为DoesSomething类编写单元测试。

通常我们可能会尝试避免创建类似的新类。我们仍然没有应用OOP的原则。但在这种情况下,我们所做的就是采用一小段无法测试并使其可测试的代码。这不是理想的。这不是我们编写代码的方式。但它更好。至少现在某事有单元测试。

您可能会从一个类中移出20行代码并将其放入另一个类中。至少现在原始类更容易管理。也许在这样做之后,原始课程也会达到你可以进行单元测试的程度。