Partial Class 简介
可以将类或结构、接口或方法的定义拆分到两个或多个源文件中。每个源文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组合起来。
Partial Class 在那些情况下使用
在以下几种情况下需要拆分类定义:
1. 处理大型项目时,使一个类分布于多个独立文件中可以让多位程序员同时对该类进行处理。
2. 使用自动生成的源时,无需重新创建源文件便可将代码添加到类中。Visual Studio 在创建 Windows 窗体、Web 服务包装代码等时都使用此方法。无需修改 Visual Studio 创建的文件,就可创建使用这些类的代码。
Partial keyword
partial 关键字指示可在命名空间中定义该类、结构或接口的其他部分。所有部分都必须使用 partial 关键字。在编译时,各个部分都必须可用来形成最终的类型。各个部分必须具有相同的可访问性,如 public、private 等。 如果将任意部分声明为抽象的,则整个类型都被视为抽象的。如果将任意部分声明为密封的,则整个类型都被视为密封的。如果任意部分声明基类型,则整个类型都将继承该类。 指定基类的所有部分必须一致,但忽略基类的部分仍继承该基类型。各个部分可以指定不同的基接口,最终类型将实现所有分部声明所列出的全部接口。在某一分部定义中声明的任何类、结构或接口成员可供所有其他部分使用。最终类型是所有部分在编译时的组合。 说明: partial 修饰符不可用于委托或枚举声明中。 |
Partial Class在自动化测试中的应用
在自动化测试中,我们的Test Case文件中的代码行数通常会很长,例如我们需要测试用户模块的功能, 我们需要测试的User有Domain User和Native User两种,这样我们可以将不同的子模块的Test Case分开到两个文件去实现,这时我们就需要使用到分步类。
如下图所示:
下表中的代码为Native user test case 的实现:
using System; using NUnit.Framework; namespace ConsoleTest { /// <summary> /// This is native user test case class /// </summary> [TestFixture] public partial class UserTestCase { #region Setup and TearDown /// <summary> /// Called once by NUnit before running all tests in this class. /// </summary> [TestFixtureSetUp] public void TestFixtureSetUp() { //TODO: } /// <summary> /// Called once by NUnit after running all tests in this class. /// </summary> [TestFixtureTearDown] public void TestFixtureTearDown() { //TODO: } [SetUp] public void TestSetUp() { //TODO: } [TearDown] public void TestTearDown() { //TODO: } #endregion #region Test case [Test(Description = "Verify some feature description.")] public void NativeUserTC_0001() { //TODO: } [Test(Description = "Verify some feature description.")] public void NativeUserTC_0002() { //TODO: } #endregion } } |
下表中的代码为Domain user的实现:
using System; using NUnit.Framework; namespace ConsoleTest { /// <summary> /// This is domain user test case class /// </summary> public partial class UserTestCase { #region Test case [Test(Description = "Verify some feature description.")] public void DomainUserTC_0001() { //TODO: } [Test(Description = "Verify some feature description.")] public void DomainUserTC_0002() { //TODO: } #endregion } } |
Summary
在基于UI Automation的自动化测试中使用分步类可以是代码更加直观,更加有效的区分子模块,快速的定位到相应的子模块进行代码的维护以及调试。
Reference
1. http://msdn.microsoft.com/zh-cn/library/wa80x488.aspx