【问题标题】:MSTest: how to increase test timeMSTest:如何增加测试时间
【发布时间】:2011-05-05 19:38:11
【问题描述】:

我有一个测试需要运行超过 1 分钟(VS2008,MSTest,测试是从 VisualStudio 启动的):

    const int TestTimeout = 1;

    [TestMethod]
    [Timeout(10*60*1000)] // 10 minutes
    public void Login_ExpirationFail_Test()
    {
        IAuthenticationParameters parameters = new AuthenticationParameters(...);
        LdapAuthentication auth1 = new LdapAuthentication();
        IAuthenticationLoginResult res = auth1.Login(parameters);

        Assert.IsNotNull(res);
        Assert.IsFalse(string.IsNullOrEmpty(res.SessionId));

        const int AdditionalMilisecodns = 400;
        System.Threading.Thread.Sleep((TestTimeout * 1000 + AdditionalMilisecodns) * 60);

        LdapAuthentication auth2 = new LdapAuthentication();
        auth2.CheckTicket(res.SessionId);
    }

此测试在“运行”模式下完成,“测试 'Login_ExpirationFail_Test' 已超出执行超时期限。”错误消息,在“调试”中 - 它工作正常。

我发现很少有与从命令行启动测试相关的类似问题。

如何让我的测试在“运行”模式下可用?

谢谢。

【问题讨论】:

    标签: unit-testing tdd timeout mstest .net-3.5


    【解决方案1】:

    答案很简单:属性值应该是一个常量,而不是表达式。

    改变

    [Timeout(10*60*1000)]
    

    [Timeout(600000)]
    

    解决了一个问题。

    编辑:对答案的评论让我注意到我最初在答案中犯的一个错误(写“60000”作为超时值)。在我的源代码中,我有 6000000 并且该值有所帮助。答案最近更正了

    【讨论】:

    • 你的数学是错误的。您已将其降低了 10 倍。此外,上面的表达式与常量完全相同,因为 C# 编译器会将其转换为相同的东西(数学错误除外)。如果这个解决方案有效,我怀疑这是因为数学错误将值降低到 mstest 要求的范围内。
    • 嗨,安德鲁,感谢您让我们注意到这一点。那只是答案中的印刷错误。我在源代码中使用了正确的数学。我不知道为什么这会有所帮助,但确实如此。
    • @Budda 这是一个怎样的答案?为什么,它应该是一个常数,一个答案?常量表达式就是这样,常量,正如 Andrew 所指出的,这就是编译器所做的。您通过自己将其变为常量来设法完成的唯一一件事是很多零很容易被误读,因为我认为这个答案本身可以证明,表达式很好并且更具可读性。
    • Uh... err... "10*60*1000" 是一个常量(一个常量表达式)。这在 VS 2010 中有效。这与 VS 2008 有什么不同吗?
    【解决方案2】:

    除了指定秒数之外,Timeout() 还支持允许无限等待的常量。

    [Timeout(TestTimeout.Infinite)]
    

    【讨论】:

    • 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
    • 最初的问题是测试超时的问题,例如在我的情况下,我的测试运行了 3h+ 所以正确的答案是第一个答案,设置时间,我的回答说“可以也做”这意味着,如果开发人员有一个长时间运行的测试并且不知道需要多长时间,TestTimeout.Infinte 是最好的选择。请详细说明为什么这不是一个好的答案?
    • 答案最好能解释他们自己的基本原理,并且不要依赖其他答案的上下文,但我同意这是一个有用的补充。很抱歉审核过程有时在没有上下文的情况下有点混乱。
    • 这看起来真的..真的..坏主意:)
    【解决方案3】:

    不是具体的步骤,但应该为您指明正确的方向:

    如果您还没有测试设置文件,请将其添加到解决方案中。

    使用测试设置打开配置向导,并查找控制测试超时的设置。

    【讨论】:

    • 测试配置中有这样的设置,但它们与所有测试相关......而我只想为1个测试延长超时......
    • 为什么要将 Timeout 应用于 const?我没有使用过那个属性,但它肯定应该应用于测试方法
    • 抱歉印刷错误。当然,[Timeout] 已应用于方法。这是一个印刷错误(最近更正)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 2021-11-03
    • 1970-01-01
    相关资源
    最近更新 更多