Я не могу найти правильный сценарий для того, что я пытаюсь сделать, несмотря на значительную работу с Google. Я новичок в тестировании/модульном тестировании/tdd и т. Д.Тестирование с помощью генералов
У меня есть следующий класс;
public class AssetManager
{
public DisconnectedBindingList<Change, AssetContext> ChangeList {get; private set;}
public AssetManager()
{
ChangeList = new DisconnectedBindingList<Change, AssetContext>();
}
public bool IsChangeValid(Change newChange)
{
return ChangeList.Any(c => c.idChange == newChange.idChange);
}
}
Чтобы сделать его более удобным для тестирования, я изменил интерфейс;
public interface IAssetManager<TContext> where TContext : DbContext, new()
{
DisconnectedBindingList<Change, TContext> ChangeList {get; set;}
bool IsChangeValid(Change newChange);
}
public class AssetManager<TContext> : IAssetManager<TContext> where TContext : DbContext, new()
{ ... }
Очевидно, есть некоторые DisconnectedBindingList<T,TContext>
, по существу, локальный кэш. TContext
необходим только при инициализации/обновлении, поэтому он не передается/сохраняется в DisconnectedBindingList
.
Это все равно не помогает мне в тестировании.
У меня есть моя тестовая установка следующим образом;
DisconnectedBindingList<Change, TestContext> data = ...
Mock<IAssetManager<TestContext>> mockRepo = new Mock<IAssetManager<TestContext>>();
mockRepo.SetupGet(x => x.ChangeList).Returns(data);
Assert.IsTrue(mockRepo.Object.IsChangeValid(new Change{idChange = 2}));
Адрес: TestContext
is just;
public class TestContext : DbContext {}
Я просто не совсем уверен, где все это падает. Кажется, что метод AssetManager.IsChangeValid()
не вызывается, что имеет смысл, поскольку я не инициализирую AssetManager, а только IAssetManager. Я потерялся относительно того, как реорганизовать/реорганизовать код, чтобы получить эту работу.
Да, ChangeList - это частный набор, поэтому, хотя я понимаю, что вы получаете, в этом случае он не работает. – Trent
@FizzBuzz В этом случае вам нужно изменить способ захвата данных. Либо разрешите его как аргумент конструктора, либо вычеркните компонент, который дает вам данные. (Например, если «ChangeList» поступает из базы данных, извините службу базы данных и вместо этого верните «данные») – Rob
В качестве альтернативы вы могли бы потенциально вызвать '.ChangeList.Clear();' и 'ChangeList.AddRange (data); ', предполагая, что коллекция позволяет это (я не знаком с' DisconnectedBindingList <,> ') – Rob