使用 nUnit 测试 Private 和 Protected 方法
来源:互联网 发布:手机 扫描软件 编辑:程序博客网 时间:2024/06/06 19:33
Testing Protected Methods
要测试一个 protected 方法,我们的测试类需要继承包含这个 protected 方法的父类,然后在测试类中就可以公开使用这个 protected 方法了,示例如下:
假设要测试下面 ClassLibrary1.Class1 中的 MyProtectedMethod() 方法:
using System;
namespace ClassLibrary1
{
/**//// <summary>
/// Summary description for Class1.
/// </summary>
public class Class1
{
protected int MyProtectedMethod(int val1, int val2)
{
return val1 + val2;
}
} // end of class
} // end of namespace
namespace ClassLibrary1
{
/**//// <summary>
/// Summary description for Class1.
/// </summary>
public class Class1
{
protected int MyProtectedMethod(int val1, int val2)
{
return val1 + val2;
}
} // end of class
} // end of namespace
下面是测试类代码:
using System;
using NUnit.Framework;
namespace ClassLibrary1
{
/**//// <summary>
/// Summary description for Tester.
/// </summary>
[TestFixture]
public class Tester : Class1
{
[Test]
public void MyProtectedMethod_Test()
{
Assert.AreEqual(5, base.MyProtectedMethod(2, 3));
}
} // end of class
} // end of namespace
using NUnit.Framework;
namespace ClassLibrary1
{
/**//// <summary>
/// Summary description for Tester.
/// </summary>
[TestFixture]
public class Tester : Class1
{
[Test]
public void MyProtectedMethod_Test()
{
Assert.AreEqual(5, base.MyProtectedMethod(2, 3));
}
} // end of class
} // end of namespace
Testing Private Methods
测试 private 方法需要使用反射
假设要测试下面 ClassLibrary1.Class1 中的 MyPrivateMethod() 方法:
using System;
namespace ClassLibrary1
{
/**//// <summary>
/// Summary description for Class1.
/// </summary>
public class Class1
{
protected int MyPrivateMethod(int val1, int val2)
{
return val1 + val2;
}
} // end of class
} // end of namespace
namespace ClassLibrary1
{
/**//// <summary>
/// Summary description for Class1.
/// </summary>
public class Class1
{
protected int MyPrivateMethod(int val1, int val2)
{
return val1 + val2;
}
} // end of class
} // end of namespace
下面是测试类代码:
using System;
using System.Reflection;
using NUnit.Framework;
namespace ClassLibrary1
{
/**//// <summary>
/// Summary description for Tester.
/// </summary>
[TestFixture]
public class Tester
{
[Test]
public void MyPrivateMethod_Test()
{
ClassLibrary1.Class1 class1 = new ClassLibrary1.Class1();
object[] aobjParams = new object[] { 3, 4 };
object strRet;
strRet = RunInstanceMethod( typeof(ClassLibrary1.Class1),
"MyPrivateMethod",
class1,
aobjParams
);
Assert.AreEqual(7, strRet.ToString());
}
/**//// <summary>
/// 运行静态方法
/// </summary>
/// <param name="t"></param>
/// <param name="strMethod"></param>
/// <param name="aobjParams"></param>
/// <returns></returns>
public static object RunStaticMethod(System.Type t, string strMethod,
object [] aobjParams)
{
BindingFlags eFlags =
BindingFlags.Static | BindingFlags.Public |
BindingFlags.NonPublic;
return RunMethod(t, strMethod,
null, aobjParams, eFlags);
}
/**//// <summary>
/// 运行实例方法
/// </summary>
/// <param name="t"></param>
/// <param name="strMethod"></param>
/// <param name="objInstance"></param>
/// <param name="aobjParams"></param>
/// <returns></returns>
public static object RunInstanceMethod(System.Type t, string strMethod,
object objInstance, object [] aobjParams)
{
BindingFlags eFlags = BindingFlags.Instance | BindingFlags.Public |
BindingFlags.NonPublic;
return RunMethod(t, strMethod,
objInstance, aobjParams, eFlags);
}
/**//// <summary>
/// 运行自定义方法
/// </summary>
/// <param name="t"></param>
/// <param name="strMethod"></param>
/// <param name="objInstance"></param>
/// <param name="aobjParams"></param>
/// <param name="eFlags"></param>
/// <returns></returns>
private static object RunMethod(System.Type t, string
strMethod, object objInstance, object [] aobjParams, BindingFlags eFlags)
{
MethodInfo m;
try
{
m = t.GetMethod(strMethod, eFlags);
if (m == null)
{
throw new ArgumentException("There is no method '" +
strMethod + "' for type '" + t.ToString() + "'.");
}
object objRet = m.Invoke(objInstance, aobjParams);
return objRet;
}
catch
{
throw;
}
}
} // end of class
} // end of namespace
using System.Reflection;
using NUnit.Framework;
namespace ClassLibrary1
{
/**//// <summary>
/// Summary description for Tester.
/// </summary>
[TestFixture]
public class Tester
{
[Test]
public void MyPrivateMethod_Test()
{
ClassLibrary1.Class1 class1 = new ClassLibrary1.Class1();
object[] aobjParams = new object[] { 3, 4 };
object strRet;
strRet = RunInstanceMethod( typeof(ClassLibrary1.Class1),
"MyPrivateMethod",
class1,
aobjParams
);
Assert.AreEqual(7, strRet.ToString());
}
/**//// <summary>
/// 运行静态方法
/// </summary>
/// <param name="t"></param>
/// <param name="strMethod"></param>
/// <param name="aobjParams"></param>
/// <returns></returns>
public static object RunStaticMethod(System.Type t, string strMethod,
object [] aobjParams)
{
BindingFlags eFlags =
BindingFlags.Static | BindingFlags.Public |
BindingFlags.NonPublic;
return RunMethod(t, strMethod,
null, aobjParams, eFlags);
}
/**//// <summary>
/// 运行实例方法
/// </summary>
/// <param name="t"></param>
/// <param name="strMethod"></param>
/// <param name="objInstance"></param>
/// <param name="aobjParams"></param>
/// <returns></returns>
public static object RunInstanceMethod(System.Type t, string strMethod,
object objInstance, object [] aobjParams)
{
BindingFlags eFlags = BindingFlags.Instance | BindingFlags.Public |
BindingFlags.NonPublic;
return RunMethod(t, strMethod,
objInstance, aobjParams, eFlags);
}
/**//// <summary>
/// 运行自定义方法
/// </summary>
/// <param name="t"></param>
/// <param name="strMethod"></param>
/// <param name="objInstance"></param>
/// <param name="aobjParams"></param>
/// <param name="eFlags"></param>
/// <returns></returns>
private static object RunMethod(System.Type t, string
strMethod, object objInstance, object [] aobjParams, BindingFlags eFlags)
{
MethodInfo m;
try
{
m = t.GetMethod(strMethod, eFlags);
if (m == null)
{
throw new ArgumentException("There is no method '" +
strMethod + "' for type '" + t.ToString() + "'.");
}
object objRet = m.Invoke(objInstance, aobjParams);
return objRet;
}
catch
{
throw;
}
}
} // end of class
} // end of namespace
- 使用 nUnit 测试 Private 和 Protected 方法
- 如何使用NUnit测试类中的private和protected方法
- NUnit详细使用用法(补充)--在.NET中如何利用NUnit测试Private和Protected方法
- 测试 Java 类的private和protected变量和方法
- 测试 Java 类的private和protected变量和方法
- 为什么类和接口不能使用private和protected?接口的方法不能使用private、protected、default
- public、protected和private使用含义
- public、protected和private
- public、protected和private
- public、private和protected
- 一个类如何使用另一个类的private、protected方法
- Java能不能继承父类的protected和private方法?
- Java private和protected修饰的内部类调用方法
- static变量和方法特征,private,public,protected作用范围
- Ruby的protected, private方法
- c++访问标号public,private,protected的区别和使用
- Java关键字系列 — public、private、protected区别和使用
- 构造函数为protected 和 private 的使用场景
- 2007年 新年音乐会
- 走路与轻量级开发
- 数据结构学习笔记之一:链表
- 在CentOS 4安装ZendStudioServer可能碰到的问题
- 七个心理寓言
- 使用 nUnit 测试 Private 和 Protected 方法
- select子句的默认排序方式
- DataTable中的数据导出Excel文件
- 用按钮调用jsp代码怎么写?
- 使用Microsoft提供的RSS工具包
- CVS服务器设置指南 for CentOs 4
- 第十三周--星期二
- 企业级UML/MDA工具Trufun 2007系列发布!
- 取消COM调用word,ppt时显示的正在切换对话框