我想用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