我是 C# 世界的新手,想给 Xamarin 一个评价。我一直在制作一个小型网络 api 库,到目前为止一切顺利,但现在我正在尝试测试网络组件,但遇到了一些麻烦。
OS: OS X 10.9.1
Xamarin: 4.2.2 (build 2)
Library: PCL targeting 4.0 (Profile158)
Nunit target: Mono / .NET 4.5
类/方法:
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Net.Http;
namespace LibTest
{
public class AsyncTest
{
public async Task<string> DoTest()
{
return await new HttpClient().GetStringAsync( "http://www.reddit.com/.json?limit=1" );
}
}
}
NUnit 测试类/案例:
using System;
using NUnit.Framework;
using LibTest;
namespace LibTestTests
{
[TestFixture]
public class LibTestTest
{
[Test]
public async void TempTest()
{
string data = await new AsyncTest().DoTest();
Assert.IsNotNull( data );
Assert.IsNull( data );
}
}
}
我的所有其他测试似乎都在工作(解析等),但这个测试只是通过了,就好像它通过了一样,但我不明白它是如何通过相互矛盾的断言的。
这是目前不支持的,还是我的实现不正确?
如果我让它与 ContinueWith()
/Wait()
同步,它会按预期工作,但显然我不想在我的库中有重复的实现,只是为了通过测试。
最佳答案
NUnit 确实支持async Task
单元测试;不幸的是,Xamarin 使用的是旧版本的 NUnit,但它没有。但是,我不建议直接同步阻塞任务,因为这会使您的错误路径测试复杂化(异常包含在 AggregateException
中)。
我的 AsyncEx library 中有一个 AsyncContext
类型可以这样使用:
[Test]
public void TempTest()
{
AsyncContext.Run(async () =>
{
string data = await new AsyncTest().DoTest();
Assert.IsNotNull( data );
Assert.IsNull( data );
});
}
关于c# - Xamarin 中的 NUnit 异步测试不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20893238/