【发布时间】:2017-06-14 14:30:53
【问题描述】:
我有一些测试代码断言无法通过我的UserRepository 创建重复的Users。
用户.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() 失败 预期:System.InvalidOperationException 实际:(没有抛出异常)
在调试器中,GetDuplicateAsync() 被评估,但在执行 LINQ 查询时,从未返回结果,因此没有引发异常。有人可以帮忙吗?
【问题讨论】:
-
您使用的是哪个 XUnit 版本?
-
@StephenCleary 征得您的许可,我将更新您对该链接的回答,指出 xUnit 2 已解决此问题。
-
@Wim 我正在使用
xUnit1.9.2。 @dcastro 是对的,我更新了我的xUnit,问题就消失了。
标签: c# async-await xunit.net