有没有人有过如何在Windows 8 Metro应用程序中单元测试异步方法的例子,以确保它会抛出所需的异常?针对特定异常的单元测试异步方法
考虑一类具有异步方法
public static class AsyncMathsStatic
{
private const int DELAY = 500;
public static async Task<int> Divide(int A, int B)
{
await Task.Delay(DELAY);
if (B == 0)
throw new DivideByZeroException();
else
return A/B;
}
}
我想写使用新Async.ExpectsException施工的测试方法。我已经试过: -
[TestMethod]
public void DivideTest1()
{
Assert.ThrowsException<DivideByZeroException>(async() => { int Result = await AsyncMathsStatic.Divide(4, 0); });
}
当然,测试不等待异步方法来完成,因此,在一个失败的测试结果,确定异常尚未抛出的,但。
这个工作在C#的其他版本精,但已从Windows 8 metro应用程序http://blogs.msdn中删除。com/b/visualstudioalm/archive/2012/06/18/visual-studio-2012-rc-what-s-new-in-unit-testing.aspx – Peregrine
那么,这是“有趣”!我已经更新了我的答案,以显示如果Win8单元测试不支持它,如何实现“异步”兼容的'ThrowsException'。 –
谢谢斯蒂芬,确实有效,但我不敢相信这样一个优雅的新功能似乎需要这样的破解,尤其是看到Windows 8 Metro如此强调异步方法。希望Windows 8发布之后的最终文档将更加完善。 – Peregrine