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);
    }   
Другие вопросы по тегам