我想用Moq來測試一些沒有成功的異步任務。c#moq測試異步任務
我可以做模擬的東西,但是當我嘗試使用mock.Object時,它拋出(Object ='m.Object'拋出了類型爲'Castle.DynamicProxy.Generators.GeneratorException'的異常)並且VS停止調試/運行。
這裏ID測試的起訂量方式:
interface ITestAsync
{
Task<IEnumerable<string>> get();
}
[Fact]
public async Task MoqShouldReturnFIRST()
{
var m = new Mock<ITestAsync>();
m.Setup(q => q.get()).ReturnsAsync(null);
var x = await m.Object.get().FirstIfNotNullOrEmptyAsync();
x.Should().BeNull();
}
下面是使用的xUnit
public class FirstIfNotNullOrEmptyAsyncTests
{
private async Task<IEnumerable<string>> getAll()
{
List<string> x = new List<string>();
x.Add("01");
x.Add("02");
await Task.Delay(1000);
return x;
}
private async Task<IEnumerable<string>> getNull()
{
List<string> x = new List<string>();
x = null;
await Task.Delay(1000);
return x;
}
private async Task<IEnumerable<string>> getEmpty()
{
List<string> x = new List<string>();
await Task.Delay(1000);
return x;
}
[Fact]
public async Task ShouldReturnFIRST()
{
var x = await getAll().FirstIfNotNullOrEmptyAsync();
x.Should().Be("01");
}
[Fact]
public async Task ShouldReturnNULLforNULL()
{
var x = await getNull().FirstIfNotNullOrEmptyAsync();
x.Should().BeNull();
}
[Fact]
public async Task ShouldReturnNULLforEMPTY()
{
var x = await getEmpty().FirstIfNotNullOrEmptyAsync();
x.Should().BeNull();
}
}
我的,我想測試Extention在傳統的方式測試:
public static async Task<T> FirstIfNotNullOrEmptyAsync<T>(this Task<IEnumerable<T>> obj) where T : class
{
var result = await obj;
return (result != null && result.Any()) ? result?.FirstOrDefault() : null;
}
重新測試從實例均通過了所有測試。只有最初的問題是界面是私人的(但猜測這是由於最小的例子)。一旦界面被公開,一切工作/通過 – Nkosi
包括整個異常消息 – Nkosi