Telerik JustMock не вызывает ожидаемый организованный метод
У меня есть простой тестовый модуль silverlight, который не работает должным образом:
DataContext context = Mock.Create<DataContext>(Constructor.Mocked);
List<Resource> resources = new List<Resource>();
Resource resource = new Resource
{
ContentType = "string",
Data = Encoding.UTF8.GetBytes("Test")
};
Mock.Arrange(() => context.Resources.Add(resource)).DoInstead(() => resources.Add(resource));
Mock.Arrange(() => context.Resources.SingleOrDefault()).Returns(resources.SingleOrDefault());
context.Resources.Add(resource);
var loaded = context.Resources.SingleOrDefault();
Свойство ресурса правильно добавлено в список локальных ресурсов (context.Resources.Add (resource)), однако, когда я пытаюсь прочитать его обратно (context.Resources.SingleOrDefault()), ничего не возвращается.
2 ответа
Чтобы вернуть обновленное значение resources.SingleOrDefault()
, вам нужно будет использовать лямбда-выражение в расположении, например так:
Mock.Arrange(() => context.Resources.SingleOrDefault())
.Returns(() => resources.SingleOrDefault());
В противном случае, когда context.Resources.SingleOrDefault()
метод вызван, макет вернет ноль, который является значением resources.SingleOrDefault()
позвоните во время договоренности.
Я не думаю, что вы должны делать заглушки на.SingleOrDefault. Это расширение.NET FW System.Lynq, и оно хорошо протестировано. То, что я имел в виду хорошо проверенные, означает, что нет смысла заглушать этот метод. Вы ВСЕГДА предполагаете, что это ВСЕГДА дает экземпляр SingleOrDefault.
С помощью модульного теста вы можете заблокировать список сбора, возвращаемый ресурсами. Затем просто получите доступ к SingleOrDefault. Тест ниже проходит
[TestMethod]
public void YourReadableTestMethod()
{
var context = Mock.Create<DataContext>(Constructor.Mocked);
context.Resources = new List<Resource>();
var resources = new List<Resource>();
var resource = new Resource {
ContentType = "string",
Data = Encoding.UTF8.GetBytes("Test")
};
resources.Add(resource);
Mock.Arrange(() => context.Resources).ReturnsCollection(resources);
context.Resources.Add(resource);
var loaded = context.Resources.SingleOrDefault();
Assert.IsNotNull(loaded);
}