
User.cs:
public class User{ public int ID { get; set; } public string AccountAlias { get; set; } public string displayname { get; set; } public string Email { get; set; } public bool IsActive { get; set; }} UserRepository.cs:
public class UserRepository{ public virtual async Task<User> CreateAsync(User entity) { if (entity == null) { throw new ArgumentNullException("entity"); } if (await GetDuplicateAsync(entity) != null) { throw new InvalIDOperationException("This user already exists"); } return Create(entity); } public async Task<User> GetDuplicateAsync(User user) { if (user == null) { throw new ArgumentNullException("user"); } return await (from u in Users where u.AccountAlias == user.AccountAlias && u.ID != user.ID && u.IsActive select u).FirstOrDefaultAsync(); }} UserRepositoryTests.cs:
public sealed class UserRepositoryTests : Idisposable{ public UserRepositoryTests() { UserRepository = new UserRepository(new FooEntitIEs()); // DbContext // from EF } private UserRepository UserRepository { get; set; } [Fact] public voID DuplicateUserCannotBeCreated() { var testUser = new User // This test user already exists in database { ID = 0,AccountAlias = "domain\foo",displayname = "Foo",Email = "foo@bar.com",IsActive = true }; Assert.Throws<InvalIDOperationException>(async () => await UserRepository.CreateAsync(testUser)); } public voID dispose() { if (UserRepository != null) { UserRepository.dispose(); } }} 当我运行这个单元测试时,抛出Xunit.Sdk.ThrowsException(即没有抛出我的InvalIDOperationException):
Assert.Throws() Failure
Expected: system.invalIDOperationException
Actual: (No exception was thrown)
从调试器中,对GetDuplicateAsync()进行了评估,但是当执行liNQ查询时,结果从未返回,因此没有抛出异常.有人可以帮忙吗?
解决方法 xUnit的Assert.Throws(至少在版本1.9.2上)不是异步感知的.这已在版本2中修复,现在有一个Assert.ThrowsAsync方法. 因此,您可以升级到xUnit 2或创建自己的方法以使其正常工作:
public async static Task<T> ThrowsAsync<T>(Func<Task> testCode) where T : Exception{ try { await testCode(); Assert.Throws<T>(() => { }); // Use xUnit's default behavior. } catch (T exception) { return exception; } return null;}await ThrowsAsync<InvalIDOperationException>(async () => await UserRepository.CreateAsync(testUser)); 从Haacked’s gist开始.
总结以上是内存溢出为你收集整理的c# – Xunit Assert中的异步lambda表达式.Throws全部内容,希望文章能够帮你解决c# – Xunit Assert中的异步lambda表达式.Throws所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)