Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单元测试:从哪里开始编写我的第一个测试_C#_Jquery_.net_Unit Testing_Nunit - Fatal编程技术网

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

C# 单元测试:从哪里开始编写我的第一个测试,c#,jquery,.net,unit-testing,nunit,C#,Jquery,.net,Unit Testing,Nunit,我的问题是,在代码库中,哪里是一个容易开始编写单元测试的地方,这样我就可以全身心投入并发展一些基本技能 详情如下: 我是一名刚被聘用的初级开发人员,我的任务是将单元测试添加到公司的项目中。我安装了NUnit,观看了教程,完成了基本的示例,并且正在阅读官方文档。我看到了自动化单元测试的价值,并且认为这是熟悉公司源代码的好方法 我们有两个在线平台,一个吸引客户的“宣传册”网站和我们的“数据库”网站。它们都是用Javascript、jQuery、C#、.NET编写的,通过实体框架连接到MSSQL。 “

我的问题是,在代码库中,哪里是一个容易开始编写单元测试的地方,这样我就可以全身心投入并发展一些基本技能

详情如下: 我是一名刚被聘用的初级开发人员,我的任务是将单元测试添加到公司的项目中。我安装了NUnit,观看了教程,完成了基本的示例,并且正在阅读官方文档。我看到了自动化单元测试的价值,并且认为这是熟悉公司源代码的好方法

我们有两个在线平台,一个吸引客户的“宣传册”网站和我们的“数据库”网站。它们都是用Javascript、jQuery、C#、.NET编写的,通过实体框架连接到MSSQL。 “宣传册”网站没有太多内置的用户功能。他们点击链接以获取信息页面。还有一个联系请求表,他们可以在这里提交基本信息,这样我们就可以联系他们了。非常简单的网站。 “数据库”更为复杂。注册用户可以从不同的数据库中获取任意数量的数据组合,不同级别的注册都涉及访问权限。基于用户选择的大量筛选

目前还没有为这两个项目编写任何测试,但它们都在生产中。从哪里开始比较好? 我想我应该从简单的“宣传册”网站开始学习,但我确实认为从长远来看,测试对于“数据库”网站更为重要

我是否应该尝试测试控制器、ajax get/post函数、视图?
我想我希望有人能说“这1,2,3都是简单的测试,从那里开始”,如果我的想法不对,请告诉我。多谢各位

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

您可以在项目的根文件夹中创建文件夹/子项目“tests”。此测试文件夹的结构应类似于代码项目源代码,以便在代码项目中轻松找到特定类的测试类/文件


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

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

您可以在项目的根文件夹中创建文件夹/子项目“tests”。此测试文件夹的结构应类似于代码项目源代码,以便在代码项目中轻松找到特定类的测试类/文件


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

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

您可能需要进行一些重构,以便能够编写单元测试。一种方法是寻找“低挂果实”——重构更容易的领域

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

或者,一个类是否有大量的私有方法,所有这些方法所做的事情似乎与该类的主要用途无关?没有办法对这些私有方法进行单元测试,但您可以将它们划分为自己的类

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

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

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

DoSomethingInAPrivateMethod();

现在我们可以为
doesmething
类编写单元测试了

通常我们会尽量避免创建这样的新类。我们仍然没有应用OOP的原理。但在本例中,我们所做的是获取一小段无法测试的代码,并使其可测试。这并不理想。这不是我们想要的编写代码的方式。但现在比以前好多了。至少现在有了单元测试


您可能需要从一个类中移出20行代码,然后将其放入另一个类中。至少现在,原来的类更易于管理。也许在这样做之后,原始类也可以进行单元测试。

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

您可能需要进行一些重构,以便能够编写单元测试。一种方法是寻找“低垂的果实”——这是重构的领域
var doesSomething = new DoesSomething();
doesSomething.DoSomething();