Tôi đang cố gắng kiểm tra một phương thức async ném ngoại lệ cụ thể.FluentAssertions ShouldNotThrow không được nhận dạng cho một phương thức async/Func
Đối với điều đó, tôi đang sử dụng MSTEST và FluentAssertions 2.0.1.
Tôi đã kiểm tra này Discussion on Codeplex và xem làm thế nào nó hoạt động với các phương pháp async-ngoại lệ này khác một liên kết về FluentAssertions async tests:
Sau một thời gian cố gắng làm việc với 'sản xuất' mã của tôi, tôi đã tắt đến Fluentassertions giả lớp aync và mã kết quả của tôi là như thế này (đặt mã này bên trong một [TestClass]
:
[TestMethod]
public void TestThrowFromAsyncMethod()
{
var asyncObject = new AsyncClass();
Action action =() =>
{
Func<Task> asyncFunction = async() =>
{
await asyncObject.ThrowAsync<ArgumentException>();
};
asyncFunction.ShouldNotThrow();
};
}
internal class AsyncClass
{
public async Task ThrowAsync<TException>()
where TException : Exception, new()
{
await Task.Factory.StartNew(() =>
{
throw new TException();
});
}
public async Task SucceedAsync()
{
await Task.FromResult(0);
}
}
vấn đề là ShouldNotThrow
là không hợp lệ:
ShouldNotThrow method is not recognised by the code. If I try to compile, it gives me this error: 'System.Func' does not contain a definition for 'ShouldNotThrow' and the best extension method overload 'FluentAssertions.AssertionExtensions.ShouldNotThrow(System.Action, string, params object[])' has some invalid arguments
Cảm ơn.
SOLUTION
2.0.1 phiên bản FA không hỗ trợ ShouldNotThrow
chức năng này và nó sẽ được bao gồm trong phiên bản tiếp theo 2.1 (gần vào tuần tới).
Lưu ý: ShouldThrow đã được hỗ trợ trong phiên bản 2.0.1.
Tôi không biết gì về FluentAssertions, nhưng ngoại lệ cho rằng ShouldNotThrow chỉ được định nghĩa cho 'Action' chứ không phải' Func'. –
@KeithPayne Có nghĩa là FluentAsseritions có thể không hỗ trợ 'async'. – svick
FluentAssertions hỗ trợ async, nếu bạn đọc liên kết ở trên (link), bạn có thể thấy nó. Và điều này cũng có thể giúp bạn: http://fluentassertions.codeplex.com/workitem/12148 – ferpega