我正在对nunit测试用例使用Timeout属性,如下所示:
@rest() //Not yet sure if i really need this
class AnotherRestCall{
@get("/path")
doSomething(name: string, id: number){ //Not the same order as above
console.log(id+": "+name);
}
}
我已经阅读了nunit的文档,但它说除了断言错误之外,重试将不起作用,但是我遇到了测试超时的情况。
我希望此测试在超时时再次执行,但是使用上述代码仅执行一次。请帮忙。
答案 0 :(得分:1)
我们遇到了同样的问题(端到端UI测试,这很挑剔,因此测试会抛出异常,而重试不起作用)
您可以采取解决方法并包装测试代码IE
protected void ExecuteTest(Action test)
{
try
{
test();
}
catch (Exception ex)
{
//If the caught exception is not an assert exception but an unhandled exception.
if (!(ex is AssertionException))
Assert.Fail(ex.Message);
}
}
您想要重试的测试,即使它看起来像
[Test, Retry(3)]
public void TestCase()
{
ExecuteTest(() =>{
<test code>
});
}
我不确定nunit timeout属性的工作方式(我假设test()调用只会抛出超时异常,在这种情况下此解决方案将起作用),但是对于您可以切换到任务或操作而言,该解决方案不起作用和WaitOne之类的东西,并且对于超时IE,执行测试的默认参数为1000
protected void ExecuteTest(Action test, int timeoutSeconds = 10)
{
try
{
var task = Task.Run(test);
if (!task.Wait(TimeSpan.FromSeconds(timeoutSeconds)))
throw new TimeoutException("Timed out");
test.BeginInvoke(null,null);
}
catch (Exception ex)
{
//If the caught exception is not an assert exception but an unhandled exception.
if (!(ex is AssertionException))
Assert.Fail(ex.Message);
}
}
这看起来像是我们最好的解决方案,因此这是我们目前已实施的方法,并且工作正常