在 Visual Studio 2008 IDE 中运行单元测试时如何传递命令行参数?

发布于 2024-11-19 04:23:16 字数 145 浏览 0 评论 0原文

在 Visual Studio 2008 中进行单元测试期间,有没有办法将命令行参数传递给应用程序上下文?我的部分代码需要以这种方式配置,我只能通过传递参数来做到这一点。

我已经检查了调试模式,并且命令行参数已填充了一些测试相关的数据。

谢谢!

Is there a way to pass command line arguments to the application cotext during unit testing in Visual Studio 2008? Part of my code needs to be configured this way and i can only do this by passing arguments.

I've checked in the debug mode and command line arguments has been filled with some test related data.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

灯角 2024-11-26 04:23:16

好吧,

我挖了很长时间,没能找到任何直接传递 CLI 参数的方法。

然而,有一个非常好的解决方法:

  1. 您需要一个类,它是 CLI 参数的解析器和持有者。就我而言,它是具有静态属性的静态类。当然,它在单元测试期间返回空值(无法识别的 CLI 参数)
  2. 您的 CLIArgsHolder 类必须以合理的方式编写,以返回空值,并且在初始化时如果缺少任何 CLI 参数,则不会抛出异常。就我而言,我仅在私有字段为 null 或为空时使用静态属性的 get 进行解析。

    公共静态类 MyCLIArgsHandler
    {
         私有字符串 mAppName = null;
         私有字符串 mStationName = null;
    
         公共字符串 StationName
         {
             得到
             {
                 if(string.isNullOrEmpty(MyCLIArgsHandler.mStationName))
                 {
                    //解析 CLI 参数
                 }
                 返回 MyCLIArgsHandler.mStationName;
             }
         }
         //...
    }
    
  3. 在开始实际测试之前,您可以将示例值注入到该类的字段中,以便:

    <前><代码>[ClassInitialize()]

    公共静态无效MyClassInitialize(TestContext testContext)
    {
    PrivateType 类型 = new PrivateType(typeof (MyCLIArgsHolder));
    type.SetStaticFieldOrProperty("mAppName", "myTestAppName");
    type.SetStaticFieldOrProperty("mStationName", "myTestStationName");
    }

瞧!

现在,您的所有类都可以将 MyCLIArgsHolder 与您在测试类初始化中放入的值一起使用。

Ok,

I was digging for a long time and was not able to find any way to pass CLI arguments directly.

However there is pretty nice workaround:

  1. You need a class which is parser and holder for CLI agruments. In my case it is astatic class with static properties. Of course it was returning null values during unit testing (no recognized CLI arguments)
  2. Your CLIArgsHolder class must be written in a sane way to return nulls and NOT throw exceptions when it initializes if any of CLI args is missing. In my case I parse only when private field is null or empty using static property's get.

    public static class MyCLIArgsHandler
    {
         private string mAppName = null;
         private string mStationName = null;
    
         public string StationName
         {
             get
             {
                 if(string.isNullOrEmpty(MyCLIArgsHandler.mStationName))
                 {
                    //PARSE CLI ARGS
                 }
                 return MyCLIArgsHandler.mStationName;
             }
         }
         //...
    }
    
  3. Before you start actuall testing you can inject sample values to fields of that class so when:

    [ClassInitialize()]
    
    public static void MyClassInitialize(TestContext testContext)
    {            
        PrivateType type = new PrivateType(typeof (MyCLIArgsHolder));
        type.SetStaticFieldOrProperty("mAppName", "myTestAppName");
        type.SetStaticFieldOrProperty("mStationName", "myTestStationName");
    }
    

Voila!

Now all your classes can use your MyCLIArgsHolder with values you put in your test class initialization.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文