MSTest:如何增加测试时间

Bud*_*dda 23 tdd unit-testing mstest timeout .net-3.5

我有一个测试需要工作超过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);
    }
Run Code Online (Sandbox Code Playgroud)

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

我看到几个与从命令行启动测试相关的类似问题.

如何在"运行"模式下使我的测试可行?

谢谢.

Bud*_*dda 18

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

更改

[Timeout(10*60*1000)]
Run Code Online (Sandbox Code Playgroud)

[Timeout(600000)]
Run Code Online (Sandbox Code Playgroud)

解决了一个问题.

编辑:评论答案引起我的注意我最初在答案中做了一个错误(写作"60000"作为超时值).在我的源代码中,我有6000000并且该值有帮助.答案最近得到纠正

  • 你的数学错了.你已经将它降低了10倍.此外,上面的表达式与常量完全相同,因为C#编译器会将它转换为相同的东西(数学错误除外).如果这个解决方案有效,我怀疑这是因为数学错误将值降低到mstest所需范围内的某个值. (6认同)
  • @Budda这是一个答案吗?为什么,*它应该是一个常数*,一个答案?一个常量表达式就是这样,不变,正如Andrew所指出的那样,无论如何编译器都会这样做.你通过把它变成一个常数来实现你唯一能做到的就是很多零错误,因为我觉得这个答案本身可以证明这一点很容易被误解,表达式很好而且更具可读性. (5认同)
  • 呃...错误......"10*60*1000"是一个常数(一个常数表达式).这适用于VS 2010.这是否从VS 2008改变了? (3认同)

Seb*_*ldi 12

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

[Timeout(TestTimeout.Infinite)]
Run Code Online (Sandbox Code Playgroud)

  • 这看起来真的……真的……坏主意:) (2认同)