Код: Выделить всё
public virtual List GetExistingRecords(HashSet sourceKeys)
{
var propertyName = ((MemberExpression)KeySelector().Body).Member.Name;
return _targetDbContext.Set()
.Where(e => sourceKeys.Contains(EF.Property(e, propertyName)))
.ToList();
}
Код: Выделить всё
protected override Expression KeySelector() => accountEntity => accountEntity.AccountNumber;
Код: Выделить всё
public class CustomerServiceTests
{
private readonly Mock _mockCustomerDbContext;
private readonly Mock _mockStagingDbContext;
private readonly Mock _mockMapper;
private readonly Core.Concrete.Domain.CustomerService _customerService;
public CustomerServiceTests()
{
_mockCustomerDbContext = new Mock();
_mockStagingDbContext = new Mock();
_mockMapper = new Mock();
_customerService = new Core.Concrete.Domain.CustomerService(_mockStagingDbContext.Object, _mockCustomerDbContext.Object, _mockMapper.Object);
}
[Fact]
public async Task MigrateAccounts_ShouldAddNewAccounts()
{
// Arrange
var sourceAccounts = CustomerTestData.GenerateAccounts(1);
var sourceAccountEntities = CustomerTestData.GenerateAccountEntities(1);
var existingAccounts = new List().AsQueryable();
_mockMapper.Setup(m => m.Map(It.IsAny())).Returns(sourceAccounts);
_mockMapper.Setup(m => m.Map(It.IsAny())).Returns(sourceAccountEntities);
_mockCustomerDbContext.Setup(db => db.Set()).ReturnsDbSet(existingAccounts);
_mockCustomerDbContext.Setup(db => db.Set().AddRangeAsync(It.IsAny(), It.IsAny())).Returns(Task.CompletedTask);
_mockCustomerDbContext.Setup(db => db.SaveChangesAsync(It.IsAny())).ReturnsAsync(1);
// Act
await _customerService.MigrateAccounts();
// Assert
_mockCustomerDbContext.Verify(db => db.Set().AddRangeAsync(It.Is(entities => entities.Count == 1), It.IsAny()), Times.Once);
_mockCustomerDbContext.Verify(db => db.Set().UpdateRange(It.IsAny()), Times.Never);
_mockCustomerDbContext.Verify(db => db.SaveChangesAsync(It.IsAny()), Times.Once);
}
[Fact]
public async Task MigrateAccounts_ShouldUpdateExistingAccounts()
{
// Arrange
var sourceAccounts = CustomerTestData.GenerateAccounts(1);
var existingAccounts = CustomerTestData.GenerateAccountEntities(1).AsQueryable();
_mockMapper.Setup(m => m.Map(It.IsAny())).Returns(sourceAccounts);
_mockCustomerDbContext.Setup(db => db.Set()).ReturnsDbSet(existingAccounts);
_mockCustomerDbContext.Setup(db => db.Set().UpdateRange(It.IsAny()));
_mockCustomerDbContext.Setup(db => db.SaveChangesAsync(It.IsAny())).ReturnsAsync(1);
_mockCustomerDbContext.Setup(db => db.ReplaceEntity(It.IsAny(), It.IsAny()));
// Act
await _customerService.MigrateAccounts();
// Assert
_mockCustomerDbContext.Verify(db => db.Set().AddRangeAsync(It.IsAny(), It.IsAny()), Times.Never);
_mockCustomerDbContext.Verify(db => db.Set().UpdateRange(It.Is(entities => entities.Count == 1)), Times.Once);
_mockCustomerDbContext.Verify(db => db.SaveChangesAsync(It.IsAny()), Times.Once);
_mockCustomerDbContext.Verify(db => db.ReplaceEntity(It.IsAny(), It.IsAny()), Times.Exactly(1));
}
Может ли кто-нибудь пролить свет на то, как мне следует настроить издевательство по-другому, чтобы исправить это?
Изменить: я добавил DotNetFiddle, чтобы показать ошибку с сокращенной версией структуры моего кода здесь - https://dotnetfiddle.net/CQTYc4
Подробнее здесь: https://stackoverflow.com/questions/791 ... -propertyt
Мобильная версия