C# asp.net中的单元测试

C# asp.net中的单元测试,c#,asp.net,unit-testing,C#,Asp.net,Unit Testing,我对单元测试相当陌生。我在学校,目前正在进行初级项目。我们要编写一个web应用程序。我们将使用C#和asp.net。我们目前正在做所有的需求、架构,我负责质量保证和选择正确的框架。我们有大量的文书工作要完成,我正在努力完成我的质量保证计划 我不确定单元测试使用什么。尽管我们将使用asp.net,但我认为目前我们没有必要使用MVC。为了简单起见,我们是否应该使用visual studio内置功能来生成ASP.NET单元测试?或者,我应该考虑使用Nunit吗?或者类似的 请记住,这只是一个学校项目。

我对单元测试相当陌生。我在学校,目前正在进行初级项目。我们要编写一个web应用程序。我们将使用C#和asp.net。我们目前正在做所有的需求、架构,我负责质量保证和选择正确的框架。我们有大量的文书工作要完成,我正在努力完成我的质量保证计划

我不确定单元测试使用什么。尽管我们将使用asp.net,但我认为目前我们没有必要使用MVC。为了简单起见,我们是否应该使用visual studio内置功能来生成ASP.NET单元测试?或者,我应该考虑使用Nunit吗?或者类似的

请记住,这只是一个学校项目。我们4人的团队都必须执行单元测试,而我们大多数人在这方面没有太多经验

你的想法是什么

为了简单起见,我们应该只使用内置的VisualStudio吗 生成ASP.NET单元测试的功能

不,那完全没用。好吧,你可以把它用于你的学校项目或其他项目,但不要欺骗自己你在做单元测试

或者,我应该考虑使用Nunit吗?或者类似的


是的,当然。但是,为了成功地对ASP.NET应用程序进行单元测试,需要对其进行设计,以使不同的层在它们之间弱耦合,并且可以单独重用。这很容易通过使用抽象(接口和抽象类)而不是使用具体的实现来实现。还要记住,任何依赖于HttpContext的代码都不能很容易地单独进行单元测试。最好的方法是使用ASP.NET提供的抽象,如HttpContextBase、HttpRequestBase、HttpResponseBase等。。。这在单元测试中很容易被模仿。

如果您想编写单元测试,您需要将逻辑与演示分离。MVC在这方面非常出色,这使得它比webforms更易于单元测试。测试webforms并非不可能,只是更难

但最终,您只需要牢记原则,并确保在整个项目中自由地使用接口,以便可以模拟它们

NUnit与MSTest之间的较量并不是一个真正的问题。这两者之间或多或少有着相同的特性,MStest的优势在于它完全内置在VisualStudio中。随你的便

我建议你也读这本书


根据项目的规模和范围,可能值得研究使用控制反转框架,例如将所有依赖项联系在一起。

两者都同意。如果你的东西耦合得太紧密(集成和相互依赖),那么肯定会有问题。将耦合分解为非用户界面需求,您可以发送所有测试,我肯定会将NUnit与C#一起使用,但我们的开发工作是与WPF一起进行的。所有的数据处理和静态函数都可以进行测试,以确认限制、空值、丢失/无效参数、预期返回结果与实际返回的结果。做得不好会很快对你的网站造成伤害。

Darin,你仍然可以与具体的类保持弱耦合,不是吗?换句话说,如果您的业务层使用您的数据层的类,那么您的数据层仍然可以以与bl隔离的方式进行测试。@Shark,不,您的业务层现在与您的数据访问层强耦合,因此不可能单独进行单元测试。是的,您可以对数据层进行单元测试,它不依赖于任何其他层(数据库除外)。所以要回答你的问题,你仍然可以和具体的类有弱耦合,不,答案是,你不能和具体的类有弱耦合+顺便问一下,我想知道你的答案。那么,这就是您设计大多数n层解决方案的方式吗?从来没有任何跨层的具体类,只有接口和抽象类?@Shark,这正是我设计应用程序的方式。我首先定义我想要实现的东西的契约(作为接口或抽象类),然后提供一些实现。谢谢你的教训和验证。我喜欢这个,我要把它带上飞机。我确实上过设计模式课。我确实认为我们可以使用某种类型的模式。该项目只是一个在线网络应用程序,为零售连锁店创建一个自动化的求职申请。我仍然不知道该用什么。如果我使用asp.MVC,我应该使用内置VS功能吗?@icelated我不知道你所说的“内置VS功能”是什么意思。你是说MVC项目模板吗?如果是,那么是的。MVC比webforms更易于测试和灵活,但需要开发人员做更多的工作。若你们点击它,它会弹出一个新的测试对话框,你们有几个选择:基本单元测试。通用测试、负载测试、单元测试等等。我想我将重新考虑使用MVC。我参加了一个设计模式课程,我想我们可以结合这个。我会调查的。