代码之家  ›  专栏  ›  技术社区  ›  Case

单元测试客户的安装(使用nunit和mstest)

  •  3
  • Case  · 技术社区  · 16 年前

    我已经为我公司的应用程序开发了大量的单元测试,开发人员希望将我的单元测试移交给我们的支持部门,以帮助他们调试客户安装问题。我使用MSTEST编写了单元测试,因此如果支持人员想直接使用我的测试,他们必须在客户的计算机上安装Visual Studio,这显然是错误的做法。我曾在命令提示下研究过使用不带vs的mstest,但黑客攻击客户系统上的注册表,使其认为安装了vs也不可行。

    为了解决这个问题,我计划使用 this post . 但是,在使用启用了nunit的编译并将测试程序集dll添加到nunit运行程序之后,我收到错误消息“此程序集不是用任何已知框架生成的”。

    有人做过这个吗?有没有人会给你一些提示/诀窍?或者这是解决这个问题的完全错误的方法?谢谢。

    2 回复  |  直到 16 年前
        1
  •  1
  •   csharptest.net    16 年前

    我将继续你的第二个想法“或者这是解决这个问题的完全错误的方法”。

    为了轻松地解决这个问题并且不混淆您的支持部门,我建议在测试类周围创建一个小的命令行包装器。您可以自己编写命令行工具,或者如果愿意,可以执行以下操作:

    using CSharpTest.Net.Commands;
    static void Main(string[] args)
    {
        MyTest testClass = new MyTest();
        // optional: testClass.MySetupMethod();
        new CommandInterpreter(testClass).Run(args);
    }
    

    只需在引用测试程序集和csharptest.net.libary.dll的新项目中将上述代码构建为命令行exe即可。命名空间 CSharpTest.Net.Commands 在csharptest.net.libary.dll组件中定义 from this download .

    基本上,上面的代码将对您的测试类(在上面的示例中名为mytest)进行爬行,并将所有公共方法公开为可以通过命令行执行的命令。默认情况下,它提供帮助输出并在失败时设置environment.exitcode。如果你想获得幻想,你可以用以下任何一项来装饰你的测试:

    public class MyTest
    {
        [System.ComponentModel.DisplayName("rename-this-function")]
        [System.ComponentModel.Description("Some description for tech-support")]
        [System.ComponentModel.Browsable(true | false)]
        public void TestSomeFunction()
        { ... }
    }
    

    (是的,我承认我无耻地插了一点代码:)

        2
  •  1
  •   si618    16 年前

    我担心的是有人添加了一个单元测试(或伪装成单元测试的集成测试),而您无意中使用了客户数据库。当然,我在做一些假设,比如你有一个数据库,但这似乎是一种冒险的方法,除非你能确定你的测试现在和将来都是非破坏性的。

    您是否已登录应用程序?这是帮助支持的传统方式,而且 many tools 出来帮你。