2010-11-30 59 views
1

我已经完成了一些关于单元测试的阅读,并希望从第一次测试开始。我正在使用ASP.NET MVC 2.单元测试ASP.NET MVC中的一个菜单2

我们通过获取职员编号并根据Roles表格检查它来确定用户的类型。如果用户存在于此表中,则设置UserType属性。

我们为每种类型的用户提供了一个菜单,并且每种类型的用户都有不同的菜单项。

如何测试看起来像这样显示每种类型用户的菜单项?

回答

1

如果您已经编写了应用程序,根据某些情况,您现在将使用“遗留代码”(基于Michael Feather的书“使用遗留代码有效地工作 - 通过”遗留代码“Feathers意味着任何系统没有被单元测试充分覆盖)。

由于@bAN提到,你将不得不做了很多工作,通过使用工厂方法,您可以用“存根”使用接口或使用override代替了你将要调用的方法分离。没有这个,你会做集成测试(因为你也将测试不同原子功能之间的集成)。但是,测试方法与生产方法的1:1比例在几乎所有情况下都不能提供足够的覆盖率。

根据您的Visual Studio版本,测试工具的数量会有所不同。如果您不使用Visual Studio工具,NUnit是一个非常流行的测试框架:http://www.nunit.org/

为了得到测试,您可以:

创建型测试项目的新项目称为YourProjectUnderTestName.Tests.Unit。

您将看到测试类具有属性[TestClass],测试方法的属性为[TestMethod]

你还必须看Assert类和它们的静态方法http://msdn.microsoft.com/en-us/library/ms182530.aspx

您应该按照您的测试安排,法,断言模式。获取所需的全部内容,以运行要独立测试的代码,然后运行测试中的代码,然后使用Asserts对预期行为进行测试。

你会在某些时候还需要了解[设置]/[TearDown中]的方法(在MSUnit)这些具有的属性:
[ClassInitialize()][TestInitialize()]
[TestCleanup()][ClassCleanup()]

ClassInitialize在开始任何测试之前运行,TestInitialize在每个班级的测试之前运行,TestCleanup在班级中的每个测试之后运行并且ClassCleanup在所有测试完成之后运行。

由于@bAN说有看看http://artofunittesting.com/网站,并认真考虑拿到这本书。这是我在办公室着火的时候可以拿到的一个,以及Code Complete。

作为@bAN和@Oliver Hanappi提到TDD是确保您进行“适当”单元测试并获得良好覆盖率的一种非常好的方法。

祝你好运!

1

单元测试是一个“微观”测试单元,因此您必须为要测试的类中的每个方法编写单元测试。使用Visual Studio单元测试非常简单,只需在类上右键单击并更改生成单元测试即可。 他为您制作测试课程,您只需编写测试方法的代码。

每个单元测试只能测试该方法,而不能测试另一个类的另一个方法。因此,如果您正在测试的方法调用另一个方法,则必须使用模拟对象来测试CALL。

一本关于单元测试的优秀且有用的书。 Art of Unit Testing

+0

请不要先写产品代码,也不要按照每种方法进行一次单元测试。如果你这样做,那么你肯定不会做TDD(测试驱动开发)。 – 2010-11-30 12:14:34

+0

@ Oliver:我认为单元测试是关于测试每个单元的代码,并在你的情况下,每种方法? – 2010-11-30 12:23:41