使用C#中的CodeDom基于签名生成方法测试用例

时间:2009-03-20 09:08:24

标签: c#

请考虑以下代码段

Assembly asm = Assembly.LoadFile(DLL_Path);
Type t = asm.GetType(DLL_NameSpace.MyClass, false, true);
clsMethodInvoke mi = new clsMethodInvoke();
foreach (MemberInfo oMember in t.GetMembers(mi.GetFilter()))
{
                                //code here
}

这些是以下变量中的值,

t = {Name = "Class1" FullName = "a.Class1"}
oMember = {Int32 add(Int32, Int32)}

现在从这些值我需要生成基于NUnit的TestCase,如下所示,

[Test()]
public virtual void Testadd1() {
    Class1 Class1 = new Class1();

    int a = -1; //random values are stored here
    int b = 2147483647; //random values are stored here

}

因此,如果在程序集中具有类的类型,我想为每个方法生成测试用例,如上所示。我怎样才能生成这样的测试用例。?

2 个答案:

答案 0 :(得分:0)

您是否看过使用T4?

文章: http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx

模板: http://www.codeplex.com/t4toolbox

编辑: http://www.visualt4.com/

就如何构建代码的技术性而言,我不确定您在提及时的含义:

Assembly asm = Assembly.LoadFile(DLL_Path);
Type t = asm.GetType(DLL_NameSpace.MyClass, false, true);
clsMethodInvoke mi = new clsMethodInvoke();
foreach (MemberInfo oMember in t.GetMembers(mi.GetFilter()))
{
    string parameters = GetParameters(oMember);
    string test = String.Format(testTemplate, t.Name, m.Name, parameters);
    // Feed test string to T4.
}

然后testTemplate将是:

[Test()]
public virtual void Test{0}{1}() {
    {0} test{0} = new {0}();

    {2}
}

答案 1 :(得分:0)

查看Pex,这是一个通过分析代码生成单元测试的工具。