Дразнить зависимое свойство с Moq - PullRequest
5 голосов
/ 16 апреля 2011

Если у меня есть класс, у которого есть зависимость, которая разрешается путем внедрения свойства, возможно ли смоделировать поведение этого свойства с помощью Moq?

, например

    public class SomeClass
     {
        //empty constructor
        public SomeClass() {}

        //dependency
        public IUsefuleService Service {get;set;}

        public bool IsThisPossible(Object someObject)
        {
           //do some stuff

           //I want to mock Service and the result of GetSomethingGood
           var result = Service.GetSomethingGood(someObject);
        }

     }

Итак, SomeClass тестируется, и я пытаюсь выяснить, могу ли я смоделировать поведение IUsefulService с Moq, поэтому, когда я проверяю IsThisPossible и удаляется строка, использующая сервис, используется макет ...

1 Ответ

7 голосов
/ 16 апреля 2011

Возможно, я неправильно понимаю и упрощаю вопрос, но я думаю, что приведенный ниже код должен работать.Поскольку у вас есть свойство Service как публичное свойство, вы можете просто смоделировать IUsefulService, новое значение SomeClass, а затем установить свойство Service на SomeClass для вашего макета.

using System;
using NUnit.Framework;
using Moq;

namespace MyStuff
{
    [TestFixture]
    public class SomeClassTester
    {
        [Test]
        public void TestIsThisPossible()
        {
            var mockUsefulService = new Mock<IUsefulService>();
            mockUsefulService.Setup(a => a.GetSomethingGood(It.IsAny<object>()))
                .Returns((object input) => string.Format("Mocked something good: {0}", input));

            var someClass = new SomeClass {Service = mockUsefulService.Object};
            Assert.AreEqual("Mocked something good: GOOD!", someClass.IsThisPossible("GOOD!"));
        }
    }

    public interface IUsefulService
    {
        string GetSomethingGood(object theObject);
    }

    public class SomeClass
    {
        //empty constructor
        public SomeClass() { }

        //dependency
        public IUsefulService Service { get; set; }

        public string IsThisPossible(Object someObject)
        {
            //do some stuff

            //I want to mock Service and the result of GetSomethingGood
            var result = Service.GetSomethingGood(someObject);
            return result;
        }
    }
}

Надеюсь, это поможет.Если я что-то упустил, дайте мне знать, и я посмотрю, что я могу сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...